高階函式特點
1.函式接收的引數是乙個函式
2.函式的return值中包含函式
滿足以上任一條件就稱這個函式為高階函式。
高階函式例子
某個函式的return值可以是任何函式,包括自己
ef test1():
print
("from test1"
)def
test2()
:print
("from test2"
)return test1
f = test2()f(
)
def
test()
:print
("from test"
)return test
f = test()f(
)
尾遞迴優化
尾遞迴即將遞迴呼叫的結構放在函式執行的最後一步,在呼叫遞迴操作之後不存在其他語句。
使用尾遞迴可以提高程式執行效率,減少棧溢位的情況。
具體是在函式return位置呼叫另乙個執行的函式,即return 函式名()
#一般遞迴
deftest
(n):
if n ==1:
return
1else
:return n + test(n -1)
print
(test(5)
)
#尾遞迴
deftest
(n, d=0)
:if n ==1:
return d +
1else
: d = d + n
return test(n -
1, d)
print
(test(5)
)
一般遞迴執行時:
test(5)
5 + test(4)
5 + 4 + test(3)
5 + 4 + 3 +test(2)
5 + 4 + 3 + 2 +test(1)
5 + 4 + 3 + 3
5 + 4 + 6
5 + 10
15
尾遞迴執行時:
test5,0)
test(4, 5)
test(3, 9)
test(2, 12)
test(1, 14)
15
Scala高階之路 尾遞迴優化
scala高階之路 尾遞迴優化 遞迴呼叫有時候能被轉換成迴圈,這樣能節約棧空間。在函式式程式設計中,這是很重要的,我們通常會使用遞迴方法來遍歷集合。而不是所有的遞迴都能被優化。遞迴之所有能被優化是在指在函式的最後一行為遞迴呼叫 即尾遞迴 並且這個遞迴呼叫沒有其它元素參與。一.什麼情況能導致棧的溢位 ...
尾遞迴優化
尾遞迴就是遞迴語句在函式最後執行,且無需對返回值進行進一步操作。編譯器會對這種遞迴進行優化,在進入深層遞迴時候,不是在遞迴棧進行入棧操作,而是直接覆蓋棧頂。線性遞迴與尾遞迴區別如下 線性遞迴 1 2 3 4 5 longrescuvie longn 尾遞迴 1 2 3 4 5 6 7 8 9 10 ...
尾遞迴優化
什麼是尾遞迴 尾遞迴就將遞迴呼叫寫在函式的尾部return 尾遞迴的好處 解決傳統遞迴的棧溢位問題 尾遞迴適合的業務場景 1.需要遞迴優化的函式沒有用timeout等非同步佇列進行遞迴呼叫函式自己 2.需要遞迴優化的遞迴函式的返回值不是每次都返回,而是條件性返回 尾遞迴優化後的遞迴demo meth...