To 阿朱

gudfen 2004-04-09 01:47:31
我又用向下递归写了一个,望指点。

#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--来回退。。
我们在写递归程序的时候,到底应怎样考虑,是不是要先分解开来,搞清每个调用过程,还是有什么规律?










...全文
61 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
privet 2004-04-09
  • 打赏
  • 举报
回复
我没能想出自上向下的递归,多谢指教!!!
个人认为在搜索路径等等的的递归中,应采取以下步骤:
向可能的方向走一步,回退,向下一个可能的方向走一步,再回退,直至走完所有可能的方向,在此题中即n+1,n+2两个可能方向。
依此思想,还可将递归用栈改为非递归,入栈对应向下一个可能的方向走一步,出栈对应回退,不过需要额外的空间记录已走过的方向。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧