尾遞迴優化

2021-08-15 17:56:34 字數 1074 閱讀 1453

尾遞迴就是遞迴語句在函式最後執行,且無需對返回值進行進一步操作。

編譯器會對這種遞迴進行優化,在進入深層遞迴時候,不是在遞迴棧進行入棧操作,而是直接覆蓋棧頂。

線性遞迴與尾遞迴區別如下

線性遞迴:

1

2

3

4

5

longrescuvie(longn)

尾遞迴:

1

2

3

4

5

6

7

8

9

10

11

12

longtailrescuvie(longn,longa)

longtailrescuvie(longn)

當n = 5時

對於線性遞迴, 他的遞迴過程如下:

rescuvie(5)}}}

}}}}}}}}}

120對於尾遞迴, 他的遞迴過程如下:

tailrescuvie(5)

tailrescuvie(5, 1)

tailrescuvie(4, 5)

tailrescuvie(3, 20)

tailrescuvie(2, 60)

tailrescuvie(1, 120)

120很容易看出, 普通的

線性遞迴比尾遞迴更加消耗資源, 在實現上說, 每次重複的過程

呼叫都使得呼叫鏈條不斷加長. 系統不得不使用棧進行資料儲存和恢復.而尾遞迴就

不存在這樣的問題, 因為他的狀態完全由n和a儲存.

尾遞迴優化

什麼是尾遞迴 尾遞迴就將遞迴呼叫寫在函式的尾部return 尾遞迴的好處 解決傳統遞迴的棧溢位問題 尾遞迴適合的業務場景 1.需要遞迴優化的函式沒有用timeout等非同步佇列進行遞迴呼叫函式自己 2.需要遞迴優化的遞迴函式的返回值不是每次都返回,而是條件性返回 尾遞迴優化後的遞迴demo meth...

尾調遞迴 ,尾調優化

尾調優化 title head body p pre 尾調優化,值得是函式最後一步呼叫了另乙個函式,函式呼叫會在內部形成乙個 呼叫記錄 儲存呼叫位置,內部變數等,a函式呼叫b函式,形成乙個 a到b的呼叫幀,直到結果返回,幀消失,b呼叫c函式,這樣,就形成了 呼叫棧,pre p h4 pre 尾調,不...

Kotlin尾遞迴優化

一 尾遞迴優化 1.遞迴的一種特殊形式 2.呼叫自身後無其他的操作 3.tailrec關鍵字提示編譯器尾遞迴優化 二 具體的來看看一下 說明 package net.println.kotlin.chapter5.tailrecursive author wangdong description 定...