高阶函数与尾递归优化

高阶函数特点
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

猜你喜欢

转载自blog.csdn.net/weixin_43690603/article/details/84377191