題目說明:算法
創世紀時,Benares有一座波羅教塔,是由三隻鑽石棒所支撐,開始時神在第一根棒子上放置了64個由上至下 依小到大的排列的金盤,並命令僧侶將全部的金盤從第一根石棒移至第三根石棒,且搬運過程當中遵照大盤子在小盤子的下面的原則。若每日僅搬一個盤子,則當盤子全數搬完時,此塔將會損毀,也就是世界末日來臨之時。spa
算法思路:code
若是柱子標爲ABC,要由A搬至C,在只有一個盤子時,就將它搬至C,當有兩個盤子,就將它當作輔助。blog
若是盤子超過2個,將第三個一下的盤子遮住,就簡單了。遞歸
每次處理兩個盤子,也就是 A->B,A->C,B->C這三個步驟,被遮住的部分。就進入遞歸處理。io
程序代碼:class
#include <stdio.h> void hanoi(int n,char A,char B,char C) { if(n==1) { printf("Move sheet %d from %c to %c\n",n,A,C); } else { hanoi(n-1,A,C,B); printf("Move sheet %d from %c to %c.",n,A,C); hanoi(n-1,B,A,C); } } int main() { int n; printf("請輸入盤數:"); scanf("%d",&n); hanoi(n,'A','B','C'); return 0; }
運行結果:程序