接著遞迴:
遞迴不僅可以自己呼叫別的函式,還可以呼叫自己:
求某個數的階乘,先用迴圈實現:
除了迴圈,遞迴也可以實現:
與迴圈不同,遞迴的思路是已經知道1
的階乘是
1,每次呼叫
f函式,只需知道比它小
1的數階乘,
n只需知道
n-1的階乘,
n-1只需知道
n-2的階乘
...直到
1為止。
同理,n
個數之和:
函式的呼叫:當在乙個函式執行期間呼叫另乙個函式時,在執行被調函式之前,系統需要完成3
件事:
1.將所有的實際引數,返回位址等資訊傳遞給被調函式儲存。
2.為被調函式的區域性變數(也包括形參)分配儲存空間。
3.將控制轉移到被調函式額入口。
從被調函式返回主調函式之前,系統也要完成3件事
1.儲存被調函式的返回結果
2.釋放被調函式的儲存空間(靜態記憶體而已)
3.依照被調函式儲存的返回位址將控制轉移到呼叫函式
不管是函式呼叫本身還是其他函式,實現原理都是壓棧出棧。在系統內部是一樣的。
實現遞迴要滿足3
個條件:
1.遞迴必須得有乙個明確的中止條件。
2.該函式處理的資料規模必須在遞減。
3.這個轉化必須是可解的,不能是死遞迴。
迴圈和遞迴的優缺點:
遞迴:易於理解
速度慢儲存空間大
迴圈:不易理解
速度快儲存空間小
遞迴專題:漢諾塔演算法:
遞迴的應用:樹和森林是以遞迴的形式實現的
樹和圖的很多演算法也是基於遞迴實現的
很多數學公式是以遞迴方式定義的,比如:菲波拉契序列
總結:記憶體的分配是一維線性的,而現實生活的問題是複雜多樣的,把複雜的問題轉化為簡單的儲存就是資料結構
邏輯結構:人的思維
線性:陣列
鍊錶棧和佇列是特殊的線性結構
非線性:樹
圖物理結構:計算機的思維
下面開始非線性結構:
樹:樹定義
專業定義:1.
有且只有乙個稱為根的結點
2.有若干個互不相交的子樹,這些樹本身也是一棵樹
通俗的定義:
1.樹由結點和邊組成
2.每個結點只有乙個父結點,但可以有多個子結點
3.有乙個結點例外,該結點沒有父結點,此結點稱為跟結點
樹分類樹操作樹應用
資料結構 六 樹
一直對樹的概念比較模糊,什麼紅黑樹啊,二叉搜尋樹等很多沒有乙個完整的知識體系結構,所以今天準備花一天的時間做乙個總結,力求搞明白樹的全部知識,不同樹之間的體系結構,以及一些常見應用。樹的定義有兩種方式。樹 tree 是包含n n 0 個結點的有窮集,其中 樹也可以這樣定義 樹是由根結點和若干顆子樹構...
資料結構 六 樹
未完待續 樹的概念 子樹 根結點 內部結點 葉結點或終端結點 深度或高度 根為第一層,根的孩子為第二層,依次類推,樹中結點最大的層數就稱為深度或高度。在樹中,如果任意乙個結點的子樹,從左到右都是有次序的,那麼這棵樹被稱為有序樹,反之則為無序樹。森林 由多棵不相交的樹的集合。樹的儲存結構 雙親表示法 ...
資料結構(六) 堆
二叉堆是基於完全二叉樹的 所謂完全二叉樹,就是每層的資料按照從左到右的方式儲存,即按照層序遍歷的順序儲存 每個節點都大於它的左孩子和右孩子,根節點為樹中最大的節點的堆為最大堆 相應的,每個節點都小於其左孩子和右孩子,根節點為最小節點的堆為最小堆 但是左右孩子的大小關係是不一定的 很顯然,堆的實現可以...