漢諾塔路徑列印(遞迴)
阿新 • • 發佈:2019-01-05
漢諾塔 (http://baike.baidu.com/view/191666.htm) 的移動也可以看做是遞迴函式。
我們對柱子編號為a, b, c,將所有圓盤從a移到c可以描述為:
如果a只有一個圓盤,可以直接移動到c;
如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤進行如下步驟
1、把 (N-1) 個圓盤移動到 b
2、將 a的最後一個圓盤移動到c
3、將b的(N-1)個圓盤移動到c
python程式碼
def move(n, a, b, c): if n==1: print(a,'-->',c) return move(n-1,a,c,b) print(a,'-->',c) move(n-1,b,a,c) t=input() move(int(t), 'A', 'B', 'C')
C++程式碼
#include<iostream> using namespace std; void move(int n,char a,char b,char c){ if(n==1){ printf("%c-->%c\n",a,c);//把a位置最後一個盤移到c位置 return ; }else{ move(n-1,a,c,b);//把n-1個a位置的盤移到b位置 printf("%c-->%c\n",a,c); move(n-1,b,a,c);//把n-1個b位置的盤移到c位置 } } int main() { int n; scanf("%d",&n); move(n,'A','B','C'); return 0; }