大家好,学习c++中遇到一个瓶颈问题
在 用递归函数解决汉诺塔问题时,源程序是 这样的
#include<iostream>
using namespace std;
int k=0,n;
void mov(int n,char a,char c,char b)
{if(n==0)return;
mov(n-1,a,b,c);
k++;
cout<<k<<":from"<<a<<"->"<<c<<endl;
mov(n-1,b,c,a);
}
int main()
{cout<<"n=";
cin>>n;
mov(n,'a','c','b');
return 0;
}
这是课本上的例子
因为我搞不明白 程序在运行时内存这块是怎么运行的,于是我这样改了这样来监督参数的具体值:
#include<iostream>
using namespace std;
int k=0,n;
void mov(int n,char a,char c,char b)
{if(n==0)return;
cout<<n<<"???"<<a<<b<<c<<endl;
cout<<"v"<<endl;
mov(n-1,a,b,c);
cout<<n<<n<<a<<b<<c<<endl;
k++;
cout<<k<<"?"<<n<<a<<"_>"<<c<<endl;
cout<<"m"<<endl;
cout<<n<<a<<b<<c<<endl;
mov(n-1,b,c,a);
cout<<"??"<<n<<a<<b<<c<<endl;
}
int main()
{cout<<"n=";
cin>>n;
mov(n,'a','c','m');
return 0;
}
如果把参数想象成在保存在内存中的一个盒子,修改后的运行
递归调用到红线部分不就结束了,运行到红线n是1不覆盖了前面的值了吗,怎么n又突然 变成2了呢?实在想不出来程序在内存中是怎么运行,请教各路解释提点一下,谢谢,因为到这儿我实在搞不明白