1. 程式人生 > 其它 >漢諾塔的遞迴實現過程

漢諾塔的遞迴實現過程

漢諾塔問題是一個經典的問題。漢諾塔(Hanoi Tower),又稱河內塔,源於印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著n片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動一個圓盤。問應該如何操作?

輸入:3

輸出:

  1 a移到c

  2 a移到b

  3 c移到b

  4 a移到c

5 b移到a

6 b移到c

7 a移到c

程式碼示例:

#include<iostream>
using namespace std;
int step=0;
void Hanoi(int n, char a, char c, char b){
  if(n==0){
    return;
  }
  // a上的n-1片圓盤移到b上.
  Hanoi(n-1, a, b, c);
  // step記錄移動的步驟數目.
  step++;
  // a上的最後一片圓盤移到c上.
  cout << step <<"; "<< a << "移到" << c << endl;
  // b上的n-1片圓盤移到c上.
  Hanoi(n-1, b, c, a);
}

int main(){
  int m;
  cin >> m;
  Hanoi(m, 'a', 'c', 'b');
  return 0;
}