递归实现汉诺塔
代码其实很简单,当初看完别人的代码后有一部分不能理解
大概是这样
......
hannoi(3,'x','y','z');
//然后我认为的运行过程
hannoi(2,x,z,y)
hannoi(1,x,z,y)
cout<<x<<"-->"<<z<<endl;
......
在hannoi(1,x,z,y)中z是y也就是’y’,x是’x’,所以打印结果应该是x–>y,然而实际打印结果却是x–>z,想了半天终于搞懂了,原来是形参和实参的问题。经过hannoi(2,x,z,y),此时变量x == ‘x’,y == ‘z’ ,z == ‘y’然后经过 hannoi(1,x,z,y)此时,变量x == ‘x’ y的值hannoi(2,x,z,y)时z的值,也就是y == ‘y’,同时z == ‘z’因此最后的打印结果是x–>z
#include<iostream>
using namespace std;
void hannoi(int n , char x ,char y, char z)
{
if( n == 1)
{
cout<<x<<"-->"<<z<<endl;
}
else
{
hannoi(n - 1,x,z,y);
cout<<x<<"-->"<<z<<endl;
hannoi(n - 1,y,x,z);
}
};
int main()
{
int n;
while(cin>>n)
hannoi(n,'x','y','z');
}