遞迴:乙個函式自己直接或間接呼叫自己。
函式的呼叫:當在乙個函式的執行期間呼叫另乙個函式時,在執行被調函式之前,系統需要完成三間事:1、將所有的實際引數、返回位址(當被調函式完成後,接下來要執行的語句的位址)等資訊傳遞給被呼叫函式儲存。2、為被調函式的區域性變數(也包括形參)分配儲存空間。3、將控制轉移到被調函式的入口。
從被調函式返回主調函式之前,系統也要完成三件事:1、儲存被調函式的返回結果(等會會被釋放)。2、釋放被調函式所佔的儲存空間(靜態的儲存空間,函式呼叫完畢,其區域性變數及形參被釋放)。3、依照被調函式儲存的返回位址將控制轉移到呼叫函式。
系統為乙個函式只分配乙個**區,即使函式被使用多次。
當有多個函式相互呼叫時,按照「後呼叫先返回」的原則。上述函式之間資訊傳遞和控制轉移必須借助「棧」來實現,即系統將整個程式執行時所需的資料空間安排在乙個棧中,每當呼叫乙個函式時,就在棧頂分配乙個儲存區,進行壓棧操作;每當乙個函式退出時,就釋放它的儲存區,進行出棧操作,當前執行的函式永遠都在棧頂位置。
遞迴滿足三個條件:1、遞迴必須得有乙個明確的終止條件;2、該函式所處理的資料規模必須在遞減(n借助n-1,n-1借助n-2);3、這個轉化必須是可解的。
迴圈和遞迴:迴圈可以用遞迴來實現
遞迴:易於理解,但速度慢,儲存空間大(浪費時間、空間)
迴圈:不易理解,但速度快、儲存空間小
漢諾塔偽演算法:
if(n>1) {
先把a柱子上的前n-1個盤子從a借助c移到b;將a柱子上的第n個盤子直接移到c;再將b柱子上的n-1個盤子借助a移動到c;
資料結構學習筆記 遞迴 例項
part類用map存有孩子的類和資訊 數量 用string存有自己的名字name,如下 public class part 問題 通過成員函式count howmany part p 計算類物件擁有目標目標結點的數量 例如,howmany couch floor howmany couch hosp...
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...