高階函式與尾遞迴優化
阿新 • • 發佈:2018-11-26
高階函式特點
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 函式名()
#一般遞迴
def test(n):
if n == 1:
return 1
else:
return n + test(n - 1)
print(test(5))
#尾遞迴
def test(n, d=0):
if n == 1:
return d + 1
else:
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