1. 程式人生 > >高階函式與尾遞迴優化

高階函式與尾遞迴優化

高階函式特點
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