#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); } 执行的过程是这样的: main
search(0) a[0]=0; search(1) a[1]=0; search(2) a[2]=0; search(3) 0 0
0 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)时输出0
1 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
递归算法的理解(转载)
最新推荐文章于 2024-08-26 23:50:52 发布