遞迴問題解決漢諾塔 C

2021-07-01 20:48:39 字數 617 閱讀 7154

#includevoid hanoii(char a,char b,char c,int n);

void main()

void hanoii(char a,char b,char c,int n)

else

}

首先讓我們來看一看 c語言的實現方法

我們可以把所有情況都看做一種情況 即看作兩層漢諾塔。

首先我們來定義乙個漢諾塔函式來處理漢諾塔 ,內部的形參為char a, char b, char c 分別代表三個柱子 int n 代表層數。

一、當塔只有一層的時候 我們便可以直接把盤子 從a移動到目標盤c   對應** 

if(n == 1) 

printf("from %c to %c\n",a,c);

二、否則都可以看作是兩層塔

把函式名看作搬運工
則第一句表示  把第n-1座塔 a->b
第二句表示  把第n座塔     a->c
最後一句    把第n-1座塔 b->c

遞迴解決漢諾塔問題

何為漢諾塔問題 漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間...

遞迴解決漢諾塔問題

漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。c語言實...

遞迴解決漢諾塔問題

漢諾塔問題 有三根相鄰的柱子,標號為a,b,c,a柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子乙個乙個移動到柱子b上,並且每次移動同一根柱子上都不能出現 子在小盤子上方,求至少需要多少次移動。我們首先假設n 1,那麼move n 1,因為這時候只需要從a c便可以。接下來假設n 2...