1. 程式人生 > >第12周專案3漢諾塔--移動步驟(遞迴函式)

第12周專案3漢諾塔--移動步驟(遞迴函式)

問題及程式碼:

/* 
*Copyright (c)2014,煙臺大學計算機與控制工程學院 
*All rights reserved. 
*檔名稱:hannuota.cpp 
*作    者:單昕昕 
*完成日期:2014年11月13日 
*版 本 號:v1.0 
* 
*問題描述:漢諾塔的遊戲。
*程式輸出:n個盤子的移動步驟。
*/  
#include <iostream>
using namespace std;
int move(int n,char A,char B,char C);
int main()
{
    int n;
    cin>>n;  //有n個盤子
    move(n,'A','B','C');
    return 0;
}
//有n個盤子,
int move(int n,char A,char B,char C)
{
    if(n==1)
        cout<<A<<"-->"<<C<<endl;
    else
    {
        move(n-1,A,C,B);
        cout<<A<<"-->"<<C<<endl;
        move(n-1,B,A,C);
    }
}

執行結果:

————————————————————————四個盤子——————————————————————————————

————————————————————————三個盤子——————————————————————————————

————————————————————————15個盤子的部分截圖——————————————————————————————

知識點總結:

漢諾塔的玩法要知道。

學習心得:

感覺這個函式的技巧性很高啊,真費腦子╮(╯▽╰)╭盤子越多步驟越多,滿足函式f(n)=2*f(n)+1.