C 用遞迴解決漢諾塔問題

2021-08-30 01:16:21 字數 502 閱讀 5320

遞迴確實是乙個不錯的演算法,可以將原來很複雜的問題簡化.這裡要注意的就是要確定乙個出口條件.不然會出現段錯誤,,也就是棧溢位.

漢諾塔問題這裡不再贅述,而它的出口條件也就是移動乙個盤子,從源位址移動到目的位置.而如果要用遞迴的方法來實現就要將移動的方法簡化,我們先考慮移動n-1個盤子,從源移動到臨時位置,然後還剩下乙個盤子,就將其移動到目的位置即可.

但是用遞迴也有一定的缺點,它比較占用資源,雖然演算法簡單.

#include

//use namespace std;

//num:個數 src:源 dst:目的地 tmp: 臨時位置

void hano(unsigned int num,char src,char dst,char tmp);

int main(void)

void hano(unsigned int num,char src,char dst,char tmp)

}

遞迴解決漢諾塔問題

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

遞迴解決漢諾塔問題

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

遞迴解決漢諾塔問題

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