数据结构之递归算法。。。小弟想到头都大了,请高手进来帮下

来源:百度知道 编辑:UC知道 时间:2024/05/19 05:26:35
#include<iostream.h>
int n=3;
int a[3];
void search(int m)
{
if(m>=n)cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
else
{
a[m]=0; //不选第m件物品
search(m+1); //递归搜索下一件物品
a[m]=1; //选第m件物品
search(m+1); //递归搜索下一件物
}
}

void main()
{
search(0);
}
结果:
0 0 0
0 0 1
0 1 0 <-为什么是010? m=1是,前一步的是001 到了下一步不是011吗?
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

请大家指点一下是运行是如何运行的????????????我好苦啊!!!!!!!!!想哭

首先,请您了解一下递归的内存管理。。。只要明白就明白了这个。
这十分简单。花个图就明白了,0/1-〉葛分出了0/1。。。
只有第一个执行了。。。才能回退。输出没错。。。

想象有多个函数search1、search2、search3、search4……
这些函数只有名字不同和代码里递归调用处稍有差别