普通遞迴與尾遞迴

2021-09-29 22:32:40 字數 1057 閱讀 7138

遞迴就是函式直接或間接呼叫自身。遞迴函式設計時明確三點,一是明確遞迴邊界條件、二是繼續執行遞迴,三是遞迴返回。當不滿足遞迴邊界條件時,遞迴前進,也即繼續執行遞迴。當滿足邊界條件時,遞迴返回。
1、資料格式就是遞迴形式,如fibonacci函式等

2、資料結構以遞迴定義,如二叉樹,圖等

3、問題解法是以遞迴實現,如回溯

普通遞迴在每次遞迴呼叫返回之前,都不會得到計算結果,普通遞迴解法相比與迴圈等,執行效率更低。並且每一次呼叫時,程式都會為這一次呼叫開闢棧空間儲存一些資料,當遞迴過大,容易棧溢位。

下面為實現fibonacci函式的普通遞迴。

int

fibonacci

(int n)

程式結構十分簡單,若求n=5的值,

fibonacci(5) = fibonacci(4)+fibonacci(3) =5

fibonacci(4) = fibonacci(3)+fibonacci(2) = 3

fibonacci(3) = fibonacci(2)+fibonacci(1) = 2

fibonacci(2) = 1

fibonacci(1) = 1

程式的遞迴是從上往下遞迴,而計算結果並返回是從下往上返回。

尾遞迴是指乙個函式裡的最後乙個動作是返回乙個函式的呼叫結果的情形,即最後一步新呼叫的返回值直接被當前函式的返回結果。如:

intf(

int x)

其核心理解在於,當呼叫其他函式時,自身是否能被釋放。

尾遞迴實現fibonacci:

int

fibonacci

(int n ,

int ret1,

int ret2)

return

fibonacci

(n-1

,ret2,ret1+ret2)

}

其實現是本次計算結果,傳遞到下一次函式中執行計算。

遞迴與尾遞迴

1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時...

遞迴與尾遞迴

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

遞迴與尾遞迴

前言 今天上網看帖子的時候,看到關於尾遞迴的應用 大腦中感覺這個詞好像在 見過,但是又想不起來具體是怎麼回事。如是乎,在網上搜了一下,頓時豁然開朗,知道尾遞迴是怎麼回事了。下面就遞迴與尾遞迴進行總結,以方便日後在工作中使用。1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接...