通過漢諾塔問題分析遞迴過程

2021-05-10 08:59:02 字數 781 閱讀 9800

具體的漢諾塔演算法如下。

2. 遞迴函式的執行軌跡

採用圖示方法描述遞迴函式的執行軌跡,從中可較直觀地了解到各呼叫層次及其執**況,具體方法如下:

⑴ 寫出函式當前呼叫層執行的各語句,並用有向弧表示語句的執行次序;

⑵ 對函式的每個遞迴呼叫,寫出對應的函式呼叫,從呼叫處畫一條有向弧指向被呼叫函式入口,表示呼叫路線,從被呼叫函式末尾處畫一條有向弧指向呼叫語句的下面,表示返回路線;

⑶ 在返回路線上標出本層呼叫所得的函式值。       

n=3時漢諾塔演算法的執行軌跡如圖3-21所示,有向弧上的數字表示遞迴呼叫和返回的執行順序。

3. 遞迴函式的內部執行過程

在計算機內部,乙個遞迴函式的呼叫過程類似於多個函式的巢狀呼叫,只不過呼叫函式和被呼叫函式是同乙個函式。為了保證遞迴函式的正確執行,系統需設立乙個工作棧。具體地說,遞迴呼叫的內部執行過程如下:

⑴ 執行開始時,首先為遞迴呼叫建立乙個工作棧,其結構包括值參、區域性變數和返回位址;

⑵ 每次執行遞迴呼叫之前,把遞迴函式的值參和區域性變數的當前值以及呼叫後的返回位址壓棧;

⑶ 每次遞迴呼叫結束後,將棧頂元素出棧,使相應的值參和區域性變數恢復為呼叫前的值,然後轉向返回位址指定的位置繼續執行。

上述漢諾塔演算法在執行過程中,工作棧的變化如圖3-22所示,其中棧元素的結構為(返回位址,n值,a值,b值,c值),返回位址對應演算法中語句的行號,圖的序號對應圖3-21中遞迴呼叫和返回的序號。

漢諾塔 遞迴過程

usr bin env python coding utf 8 author jia shilin 漢諾塔 list1,list2,list3三個陣列代表三個柱子和圓盤 數字的大小代表圓盤的大小 數字的順序代表圓盤的順序 漢諾塔函式 def h n,x list,y list,z list,x,y,...

漢諾塔問題遞迴演算法分析

乙個廟裡有三個柱子,第乙個有64個盤子,從上往下盤子越來越大。要求廟裡的老和尚把這64個盤子全部移動到第三個柱子上。移動的時候始終只能小盤子壓著 子。而且每次只能移動乙個。1 此時老和尚 後面我們叫他第乙個和尚 覺得很難,所以他想 要是有乙個人能把前63個盤子先移動到第二個柱子上,我再把最後乙個盤子...

漢諾塔問題(遞迴)

題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...