C語言遞迴實現漢諾塔問題

2021-09-10 07:09:32 字數 1134 閱讀 5733

剛剛學習漢諾塔問題想要快速上手的話也可以理解為由三個柱構成:

具體到函式裡下面的注釋裡有寫。

在使用遞迴前我們首先要知道什麼是遞迴:

程式呼叫自身的程式設計技巧稱為遞迴( recursion)。

遞迴的作用:

遞迴做為一種演算法在程式語言中廣泛應用。 乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。這裡是引用

漢諾塔問題要求將a柱所有盤子從下面開始按大小順序重新擺放在c柱上,並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

可以看出將上面的兩個盤子看作整體後,問題便又回到了兩個圓盤的移動

由此歸納出將最大圓盤(即第n個圓盤)上面的(n-1)個圓盤看作乙個整體進行兩個圓盤的移動;再將上面的(n-1)個圓盤上面的(n-2)個圓盤看作乙個整體進行兩個圓盤的移動…直到整體中只包含最小的圓盤,這個最小的圓盤只需要從a移動到c即可

下面是漢諾塔問題c語言的遞迴寫法:

#include

#include

//n個盤子

void

hanoi

(int n,

char a,

char b,

char c)

;//a為起始柱,b為輔助柱,c為目標柱

void

move

(int n,

char a,

char b)

;//a為起始柱,b為目標柱

int count;

intmain()

void

hanoi

(int n,

char a,

char b,

char c)

//a為起始柱,b為輔助柱,c為目標柱

else

}void

move

(int n,

char a,

char b)

//a為起始柱,b為目標柱

C語言遞迴 (漢諾塔問題)

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

遞迴實現漢諾塔問題

遞迴的思想是將乙個大的複雜的問題分成小的問題來解決,而要求是小的問題與大的問題有相似的解法,並且問題的規模越來越小,並且必須存在遞迴出口。下面就用 完成漢諾塔問題 總結 通過遞迴實現漢諾塔的例子我們可以看出,在涉及大型而複雜的問題時,遞迴會使程式在總體上變得簡單易於理解,而涉及遞迴的呼叫過程時則會比...

漢諾塔問題 遞迴實現

一共就三步 把 n 1 號盤子移動到緩衝區 把1號從起點移到終點 然後把緩衝區的n 1號盤子也移到終點 所以寫成py 就是 def move n from buffer,to ifn 1 print move n from from to to else move n 1,from,to buffe...