御坂坂的c++学习之路(5)

递归实现汉诺塔
代码其实很简单,当初看完别人的代码后有一部分不能理解
大概是这样

......
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');

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章