Python 递归与尾递归 事例详解

小明帯了一笔钱出去旅游,出门的第一天花了ー半,加10元,往后的每天都花之前一天剩下的半,加10元,
第八天的早上时候小明只剩下了10元钱,写段代码,计算小明出去的时候带了多少钱?

一般递归:

每一级递归,都会调用函数本身,会创建新的栈,随着递归深度的增加,创建的栈会越来越多,最终会造成爆栈。

def money(day):
    if day == 8:
        return 10
    else:
        money_new = (money(day + 1) + 10) * 2
        return money_new

尾递归:

基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不是创建新的调用栈,类似迭代的实现,

时间和空间上均优化了一般递归。

def money_02(day, total=10):
    if day == 8:
        return total
    else:
        money_new = money_02(day + 1, (total + 10) * 2)
        return money_new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值