python 函数式编程尾递归优化 day16

函数编程的特征:

1不可变:不用变量保存状态,不修改变量

#非函数式
a = 1
def incr_test1():
    global a#一旦更改全局变量后后面再调用a就容易乱
    a += 1
    return a
incr_test1()
print(a)
def bar():
    print('from bar')
def foo():
    print('from foo')
    return bar
n = foo()
n()

return可以返回任何数值,包括自己

def hanle():
    print('form handle')
    return hanle
h = hanle()
h()()

 

高阶函数:

把函数当做参数传给另一个函数

返回值包括函数

两个有一个就是高阶函数

 

尾递归优化,尾递归,函数最后一步是递归函数

其好处是可以释放上一层次的内存,优化运行效率

#函数bar在foo为非尾调用
def bar(n):
    return n
def foo(x):
    y = bar(x)
    return y

#函数bar在foo内卫非尾调用
def bar(n):
    return n
def foo():
    return bar(x)+1
#非尾递归
def cal(seq):
    if len(seq) == 1:
        return seq[0]
    head,*tail = seq
    return head+cal(tail)
print(cal(range(100)))

#尾递归
def cal(l):
    print(l)
    if len(l) == 1:
        return l[0]
    first,second,*args = 1
    l[0]=first+second
    l.pop(1)
    return cal(l)
x=cal([i for i in range(10)])
print(x)

 

转载于:https://www.cnblogs.com/wangleiyifan/p/9278719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值