漢諾塔遞迴演算法分析,求漢諾塔遞迴全過程的演算法詳解圖,記得一定要是圖釋哦!!!

2022-02-09 03:25:47 字數 5491 閱讀 3362

1樓:匿名使用者

我之前回答過的,http://zhidao.baidu.

2樓:匿名使用者

hanoi塔問題, 演算法分析如下,設a上有n個盤子。

如果n=1,則將圓盤從a直接移動到c。

如果n=2,則:

(1)將a上的n-1(等於1)個圓盤移到b上;

(2)再將a上的一個圓盤移到c上;

(3)最後將b上的n-1(等於1)個圓盤移到c上。

如果n=3,則:

a)將a上的n-1(等於2,令其為n`)個圓盤移到b(藉助於c),步驟如下:

(1)將a上的n`-1(等於1)個圓盤移到c上。

(2)將a上的一個圓盤移到b。

(3)將c上的n`-1(等於1)個圓盤移到b。

b)將a上的一個圓盤移到c。

c)將b上的n-1(等於2,令其為n`)個圓盤移到c(藉助a),步驟如下:

(1)將b上的n`-1(等於1)個圓盤移到a。

(2)將b上的一個盤子移到c。

(3)將a上的n`-1(等於1)個圓盤移到c。到此,完成了三個圓盤的移動過程。

從上面分析可以看出,當n大於等於2時, 移動的過程可分解為三個步驟:第一步 把a上的n-1個圓盤移到b上;第二步 把a上的一個圓盤移到c上;第三步 把b上的n-1個圓盤移到c上;其中第一步和第三步是類同的。 當n=3時,第一步和第三步又分解為類同的三步,即把n`-1個圓盤從一個針移到另一個針上,這裡的n`=n-1。

hanoi塔問題中函式呼叫時系統所做工作

一個函式在執行期呼叫另一個函式時,在執行被呼叫函式之前,系統先完成3件事:

①將所有的實參、返回地址等資訊傳遞給被呼叫函式儲存。

②為被呼叫函式的區域性變數分配儲存區;

③將控制轉移到被呼叫函式的入口。

從被呼叫函式返**用函式前,系統也應完成3件事:

①儲存被呼叫函式的結果;

②釋放被呼叫函式的資料區;

③依照被呼叫函式儲存的返回地址將控制轉移到呼叫函式。

當有多個函式構成巢狀呼叫時,按照「後呼叫先返回」的原則(lifo),上述函式之間的資訊傳遞和控制轉移必須通過「棧」來實現,即系統將整個程式執行時所需的資料空間安排在一個棧中,每當呼叫一個函式時,就為其在棧頂分配一個儲存區,每當從一個函式退出時,就釋放其儲存區,因此當前執行函式的資料區必在棧頂。堆疊特點:lifo,除非轉移或中斷,堆疊內容的存或取表現出線性表列的性質。

正是如此,程式不要求跟蹤當前進入堆疊的真實單元,而只要用一個具有自動遞增或自動遞減功能的堆疊計數器,便可正確指出最後一次資訊在堆疊中存放的地址。

一個遞迴函式的執行過程型別於多個函式的巢狀呼叫,只是呼叫函式和被呼叫函式是同一個函式。因此,和每次呼叫相關的一個重要的概念是遞迴函式執行的「層次」。假設呼叫該遞迴函式的主函式為第0層,則從主函式呼叫遞迴函式為進入第1層;從第i層遞迴呼叫本函式為進入下一層,即i+1層。

反之,退出第i層遞迴應返回至上一層,即i-1層。為了保證遞迴函式正確執行,系統需設立一個「遞迴工作棧」,作為整個遞迴函式執行期間使用的資料儲存區。每一層遞迴所需資訊構成一個「工作記錄」,其中包括所有實參、所有區域性變數以及上一層的返回地址。

每進入一層遞迴,就產生一個新的工作記錄壓入棧頂。每退出一層遞迴,就從棧頂彈出一個工作記錄,則當前執行層的工作記錄必是遞迴工作棧棧頂的工作記錄,稱這個記錄為「活動記錄」,並稱指示活動記錄的棧頂指標為「當前環境指標」。

p.s.**如您寫的。

求漢諾塔遞迴全過程的演算法詳解圖,記得一定要是圖釋哦!!!

3樓:匿名使用者

**是什麼意思呀。

這個演算法 那麼簡單沒必要搞得那麼複雜吧。

an = an-1 + 1;

你明白這個等式的意義嗎?

這個等式已經包含了遞迴演算法的全部含義。

an 表示 n個數的和,an-1 表示n-1個數的和 ,an = an-1 + 1;表示n個數的和可以通過n-1個數的和來求的。

上述說明哪些情況可以使用遞迴呢?

那就是:已知前一個步驟可以求得後一個步驟的結果的情況,並且前一個步驟和後一個步驟是有規律過度的。

比如漢諾塔問題:

移n個盤是已移n-1個盤為條件的,兩者的共同點是移盤。所以可以用f(n)表示移n個盤,f(n-1)表示移n-1個盤,那麼移n個盤和移n-1個盤有什麼關係呢?

這就需要預先分析問題才能得出具體的關係

在這個問題中,把n個盤從a移到c需要三個步驟來完成。

1.n-1個盤從a移到b

2 1個盤從a移到c

3 n-1個盤從b移到c

已知n-1個盤從a移到b是可行的,為什麼?

因為移1個盤是可行,那麼移2個盤也是可行,移 3個盤是已移2個盤為條件的,所以移3個盤也是可行的,所以移n個 盤是可行的。

所以根據已知條件可以解得:

設f(n, a, b,c) 表示 把n個盤從a移到c 藉助b --------------------------這裡很關鍵,這是搞懂遞迴的關鍵關鍵。

那麼把n-1個盤從a移到b 藉助c 怎樣表示呢?

很明顯是:f(n-1, a, c,b)

那麼把1個盤從a移到c怎樣表示呢?

很明顯是:f(1, a, b,c)

那麼把n-1個盤從b移到c 藉助a 怎樣表示呢?

很明顯是:f(n-1, b, a,c)

所以f(n, a, b,c) = ( f(n-1, a,c,b) , f(1, a, b,c), f(n-1, b,a,c))

這和等差等比數列一個原理。

沒有什麼 特別的。

記住是問題有這樣遞推關係才可以使用這種方法。

如果要你計算1+2+8+22 的結果 你就不能使用遞迴。

因為該問題的後一步驟與前一步驟不具有規律性,所以已知前一個步驟並不能求的後一個步驟的值

1+2+3+4 ...+ 111111111111111111111111111111

這個問題就可以使用遞迴

原因你懂了吧。

至於爬樓梯問題,無限級分類 問題等一些遞迴問題,那不過時小菜一碟。

一句話:後一步驟依賴前一步驟並且二者聯絡具有規律性,運用遞迴必然成功。

4樓:算命必解命

生活中大部分問題都可以用遞迴思想,其實是一種分配任務的思維,上級不用知道下級完成的細節。例如省分配任務給市,省總結市經驗。

市分配任務給縣,市總結縣經驗。

。。。村委分配任務給個人,村委總結村員經驗。

這就是個遞迴,省委不用知道某個村員怎麼做的。

f(省)表示省完成任務所需的步驟,它由兩步構成,f(市),

省總結經驗。

同理f(市)也由兩步構成的,

f(縣),

市總結經驗。

。。。如果變數是村員,那就是幹活。這是遞迴終止條件。

5樓:匿名使用者

有三個圈至少要2的3次方減1次

有四個圈至少要2的4次方減1次

有五個圈至少要2的5次方減1次

.........以此類推

漢諾塔問題的遞迴求解演算法,並分析演算法的時間複雜性

6樓:匿名使用者

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

}時間複雜度下限是o(2n)

7樓:是個天才

#include

using namespace std;

int sum=0;

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

時間複雜度o(2^n)

求漢諾塔c遞迴演算法詳細解答 20

8樓:拓跋乃

hanoi塔問題, 演算法分析如下,設a上有n個盤子。

如果n=1,則將圓盤從a直接移動到c。

如果n=2,則:

(1)將a上的n-1(等於1)個圓盤移到b上;

(2)再將a上的一個圓盤移到c上;

(3)最後將b上的n-1(等於1)個圓盤移到c上。

如果n=3,則:

a)將a上的n-1(等於2,令其為n`)個圓盤移到b(藉助於c),步驟如下:

(1)將a上的n`-1(等於1)個圓盤移到c上。

(2)將a上的一個圓盤移到b。

(3)將c上的n`-1(等於1)個圓盤移到b。

b)將a上的一個圓盤移到c。

c)將b上的n-1(等於2,令其為n`)個圓盤移到c(藉助a),步驟如下:

(1)將b上的n`-1(等於1)個圓盤移到a。

(2)將b上的一個盤子移到c。

(3)將a上的n`-1(等於1)個圓盤移到c。到此,完成了三個圓盤的移動過程。

從上面分析可以看出,當n大於等於2時, 移動的過程可分解為三個步驟:第一步 把a上的n-1個圓盤移到b上;第二步 把a上的一個圓盤移到c上;第三步 把b上的n-1個圓盤移到c上;其中第一步和第三步是類同的。 當n=3時,第一步和第三步又分解為類同的三步,即把n`-1個圓盤從一個針移到另一個針上,這裡的n`=n-1。

hanoi塔問題中函式呼叫時系統所做工作

一個函式在執行期呼叫另一個函式時,在執行被呼叫函式之前,系統先完成3件事:

①將所有的實參、返回地址等資訊傳遞給被呼叫函式儲存。

②為被呼叫函式的區域性變數分配儲存區;

③將控制轉移到被呼叫函式的入口。

從被呼叫函式返**用函式前,系統也應完成3件事:

①儲存被呼叫函式的結果;

②釋放被呼叫函式的資料區;

③依照被呼叫函式儲存的返回地址將控制轉移到呼叫函式。

當有多個函式構成巢狀呼叫時,按照「後呼叫先返回」的原則(lifo),上述函式之間的資訊傳遞和控制轉移必須通過「棧」來實現,即系統將整個程式執行時所需的資料空間安排在一個棧中,每當呼叫一個函式時,就為其在棧頂分配一個儲存區,每當從一個函式退出時,就釋放其儲存區,因此當前執行函式的資料區必在棧頂。堆疊特點:lifo,除非轉移或中斷,堆疊內容的存或取表現出線性表列的性質。

正是如此,程式不要求跟蹤當前進入堆疊的真實單元,而只要用一個具有自動遞增或自動遞減功能的堆疊計數器,便可正確指出最後一次資訊在堆疊中存放的地址。

一個遞迴函式的執行過程型別於多個函式的巢狀呼叫,只是呼叫函式和被呼叫函式是同一個函式。因此,和每次呼叫相關的一個重要的概念是遞迴函式執行的「層次」。假設呼叫該遞迴函式的主函式為第0層,則從主函式呼叫遞迴函式為進入第1層;從第i層遞迴呼叫本函式為進入下一層,即i+1層。

反之,退出第i層遞迴應返回至上一層,即i-1層。為了保證遞迴函式正確執行,系統需設立一個「遞迴工作棧」,作為整個遞迴函式執行期間使用的資料儲存區。每一層遞迴所需資訊構成一個「工作記錄」,其中包括所有實參、所有區域性變數以及上一層的返回地址。

每進入一層遞迴,就產生一個新的工作記錄壓入棧頂。每退出一層遞迴,就從棧頂彈出一個工作記錄,則當前執行層的工作記錄必是遞迴工作棧棧頂的工作記錄,稱這個記錄為「活動記錄」,並稱指示活動記錄的棧頂指標為「當前環境指標」。

p.s.**如您寫的。

漢諾塔問題 關於遞迴和回溯的,漢諾塔遞迴函式問題

理解計算機的遞迴過程,和以前數學中的遞推證明非常接近。數學的遞推證明的思想是,假定n 1的時候是正確的,證明n也是正確就可以了。遞迴過程的思想是,如果已經有了解決 當然,還要處理一下遞迴的結束條件 當n 1的時候 否則遞迴就不會結束了。利用遞迴解決漢諾塔,其最巧妙之處在於實參和形參的不斷變幻。就是形...

c語言遞迴呼叫漢諾塔,C語言函式遞迴呼叫漢諾塔問題

遞迴演算法的出發點不是由初始條件出發,而是把出發點放在求解的目標上,從所求的未知項出發逐次呼叫本身的求解過程,直到遞迴的邊界 即初始條件 漢諾塔問題的重點是分析移動的規則,找到規律和邊界條件。若需要將n個盤子從a移動到c就需要 1 將n 1個盤子從a移動到b 2 將你第n個從a移動到c 3 將n 1...

漢娜蒙塔娜電影版有幾部

hannah montana 一共有四季 第一季 http verycd.topics 2765896 第二季 http verycd.topics 2773317 第三季 http verycd.topics 2748834 第四季 http verycd.topics 2834892 但是第四季...