#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
递归算法的理解(转载)
最新推荐文章于 2022-08-07 00:38:14 发布