递归算法的理解(转载)

来源:互联网 发布:淘宝账户没有等级 编辑:程序博客网 时间:2024/05/22 03:36
#include 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); } 执行的过程是这样的: mainsearch(0) a[0]=0; search(1) a[1]=0; search(2) a[2]=0; search(3) 0 00 a[2]=1; search(3) 0 0 1 a[1]=1; search(2) //你的问题在这里,当m=1的时候,他执行的是④的search(m+1),这时的m是1他一定要走到search(2)中。就又把a[2]改成0了。在②search(3)时输出01 0 a[2]=0; search(3) 0 1 0 a[2]=1; search(3) 0 1 1 a[0]=1;search(1) a[1]=0; search(2) a[2]=0; search(3) 1 0 0 a[2]=1;search(3) 1 0 1 a[1]=1; search(2) a[2]=0; search(3) 1 1 0 a[2]=1;search(3) 1 1 1
0 0