經典演算法之河內之塔

2021-06-22 13:43:51 字數 719 閱讀 5988

**如下:

#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...