御坂坂的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');

}

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