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 但是第四季...