To 阿朱
我又用向下递归写了一个,望指点。
#include "iostream.h"
#include <stdio.h>
#define MAX 10
int N;
int sum;
int a[MAX];
void print(int a[]){
int j=0;
do{
cout<<a[j]<<" ";
}while(a[j++]!=0);
cout<<endl;
sum++;
}
void searchPath(int i){
a[N++]=i;
if(i==0) {
::print(a);
return;
}
if(i>0){
::searchPath(i-1);
N--;
if(i>1) {
::searchPath(i-2);
N--;
}
}
}
void main(){
int no;
cout<<"Input the destination :";
cin>>no;
sum=N=0;
::searchPath(no);
cout<<"The available solution is "<<sum<<endl;
}
我感觉我错在没有保存路径N,我开始太天真了,以为可以直接打。
另外,我想问:我把你的那个程序的递归过程分解了一遍,觉得递归做的东西很多。
比如说:你加了N--来回退。。
我们在写递归程序的时候,到底应怎样考虑,是不是要先分解开来,搞清每个调用过程,还是有什么规律?