遞迴方法是通過利用系統上一階段的狀態來計算本階段的狀態,類似於「數學歸納法」,由初始階段狀態與狀態間的變換函式可得任意階段的系統輸出。
漢諾塔某一層的移動是先進先出,因此可以利用鏈棧和遞迴方法來構建並實現漢諾塔問題:
#include #include #include using namespace std;
//建立鏈棧的乙個節點
typedef struct node
*stacklink;
int height;//塔高
stacklink topa,topb,topc;//三個鏈棧的頂節點
//向鏈棧中增加乙個節點
void pushlink(stacklink &topa,int data)
//鏈棧中彈出頂點
int poplink(stacklink &topa)
void makehanoi(int height,stacklink &topa,stacklink &topb,stacklink &topc)
}//將一塊積木移動到另乙個塔上
void moveonce(stacklink &topa,stacklink &topc)
}//移動漢諾塔,其中多次呼叫函式自身
void movehanoi(int height,stacklink &topa,stacklink &topb,stacklink &topc)
while(q!=null)
while(r!=null)
if(1==height)
else }
int main()
這樣便實現了漢諾塔演算法,當然資料結構上可以採取更簡單的例如字串,但多嘗試幾種可以變得融會貫通哈~ 重讀資料結構之優先順序佇列
佇列是一種先進先出的結構,但優先順序佇列需要對後擠進去的資料進行排序,如果足夠大的話會排至隊首。它可以用來維護一堆資料中最大 最小 的 個資料,在這裡用大頂堆 完全二叉樹 來實現不停輸入整數時找出k個最小的數,通過與堆頂的比較,決定是否頂替堆頂並再次排序。這也是為了給 樹求 近鄰做個鋪墊 大頂堆在陣...
資料結構(c語言)漢諾塔(Hanno)遞迴實現
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。規定,按...
經典問題 C語言資料結構 漢諾塔 遞迴
漢諾塔可以說是非常經典的遞迴呼叫的例子,關於它的 有興趣可以自己查一下。它的操作形象點講就是 在a b c三根柱子中,將a柱子上的n個圓盤 從上到下圓盤直徑依次增大的堆疊方式 利用b和c移動到c柱子上,並且每次只能移動乙個圓盤,小圓盤必須在大圓盤上面。實現步驟 1 假設a中共有n個圓盤,先將其中的n...