尾遞迴就是遞迴語句在函式最後執行,且無需對返回值進行進一步操作。
編譯器會對這種遞迴進行優化,在進入深層遞迴時候,不是在遞迴棧進行入棧操作,而是直接覆蓋棧頂。
線性遞迴與尾遞迴區別如下
線性遞迴:
1
2
3
4
5
long
rescuvie(
long
n)
尾遞迴:
1
2
3
4
5
6
7
8
9
10
11
12
long
tailrescuvie(
long
n,
long
a)
long
tailrescuvie(
long
n)
當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 定...