遞迴的本質

2021-06-28 15:29:08 字數 975 閱讀 7445

遞迴簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段(其實就是進棧出棧的操作)。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點:(1) 遞迴就是在過程或函式裡呼叫自身。(2) 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

遞迴一般用於解決三類問題:

(1)資料的定義是按遞迴定義的。(fibonacci函式,n的階乘)

(2)問題解法按遞迴實現。(回溯)

(3)資料的結構形式是按遞迴定義的。(二叉樹的遍歷,圖的搜尋)

遞迴的缺點:

遞迴解題相對常用的演算法如普通迴圈等,執行效率較低。因此,應該盡量避免使用遞迴,除非沒有更好的演算法或者某種特定情況,遞迴更為適合的時候。在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存,因此遞迴次數過多容易造成棧溢位。

舉例:

//

直接遞迴求鍊錶的長度

intgetlengthrecursive(linklist head)

//用遞迴實現 從尾到頭輸出鍊錶 

//很誠實的說盜用了別人的思想,真的太妙了,完全能看出你是否真的體會了遞迴的原理

//正如那位哥們所說,遞迴就是乙個進棧出棧的過程,鍊錶前面的元素先進棧,在棧底,後面的元素後進棧,在棧頂,先出棧,哈哈。。。

void recursion(node* head)

if(head->next!=null)

//如果把這句放在第二個if前面,那就是從頭到尾輸出鍊錶,曾經的你或許是用while或者用for迴圈輸出鍊錶,現在你又多了一種方式

cout}

遞迴本質討論

source click here 遞迴 分 遞推 和 回歸 遞迴的概念及遞迴演算法的結構 1 所謂的遞迴,是指函式在執行過程中自己呼叫了自己或者說某種資料結構在定義時又引用了自身。這兩種情況都可理解為遞迴。比如 void fun fun 以上函式fun就是乙個遞迴函式。而針對於各種資料結構中的遞迴...

徹底理解遞迴,從遞迴的本質說起!

遍歷二叉樹,是學習樹這種資料結構首先要理解的一種基本操作。比較簡單地方式就是用遞迴去遍歷,鑑於遞迴這種呼叫方法有一定的特殊性,今天還是想來講講怎麼去理解遞迴遍歷。本文針對想理解遞迴的過程的朋友,因為本人在學到這一部分的時候也糾結了很久,其實只要理解了過程,那以後寫遞迴的 再也不用 心虛 了,因為那個...

本質啊本質之四 陣列的本質

陣列 1.陣列是同型別的聚合 2.定義乙個陣列,如 type x n 意思是記憶體裡有 n個連續的 type 型變數,連續的排列在一起。x 是第乙個元素的位址,是乙個立即數,是右值,不是變數。x x 0 這是編譯器處理的,因為當你將 x 賦值給乙個指標時 編譯器實際上就用的 x 0 3.多維陣列也是...