**如下:
#include
using namespace std;
void hanoi(int n,char a,char b,char c);
static int day = 0; // 用於表示移動盤子所需的天數
int main()
// 遞迴函式:將a柱子上n個盤子通過b柱子放到c柱子上
void hanoi(int n,char a,char b,char c)
else
}
計算移動次數:
如果要計算一共移動了多少次,找出規律即可。
假設移動n
個盤子需要移動
f(n)
次,所以把
n-1個盤子移動到
b柱子上,需要移動
f(n-1)
次,然後把第
n個盤子移動到
c柱子上,需要移動
1次,最後把
n-1個盤子移動到
c柱子上,需要移動
f(n-1)
次,綜上所述,一共移動了
f(n) = 2 f(n-1) + 1
而:f(1) = 1;
f(2) = 2*1+ 1;
f(3) = 2(2*1+ 1)+ 1;
.......
f(n) = 2^n -1
河內之塔 漢諾塔問題 遞迴
河內之塔 towersofhanoi 是法國人m.claus lucas 於1883年從泰國帶至法國的,河內為越戰時 北越的首都,即現在的胡志明市 1883年法國數學家edouardlucas曾提及這個故事,據說創世紀時benares有一座波羅教塔,是由三支鑽石棒 pag 所支撐,開始時神在第一根棒...
經典遞迴演算法之哈諾塔問題
漢諾塔問題 有三根柱子a,b,c,其中a上面有n個圓盤,從上至下圓盤逐漸增大,每次只能移動乙個圓盤,並且規定大的圓盤不能疊放在小的圓盤上面,現在想要把a上面的n個圓盤全部都移動到c上面,輸出移動的總步數以及移動的過程 分析 先求出移動的總步數 1,假設g n 表示n個圓盤時的移動總的步數,當n 1時...
Python學習之遞迴函式和河內塔問題詳解
學習python 有所幫助。關於遞迴函式 函式內部呼叫自身的函式。以n階乘為例 f n n 1 x 2 x 3 x 4 x.x n 1 x n n x n 1 1 def factorial n 2 if n 1 3 return 14 return n f n 1 呼叫過程如下 f 5 5 f 4...