遞歸實現漢諾塔
代碼其實很簡單,當初看完別人的代碼後有一部分不能理解
大概是這樣
......
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');
}