递归(2)

1.设计递归算法时,一定要避免陷入无限递归的情况(虽然python设置了一个最大递归深度,一般为1000,达到限制就会产生RunTimeError的错误),使得所有的递归调用链最终都会达到一种基本情况,并且每个基本情况的 处理不使用递归。

2.通过分析问题,写出更好的递归算法。以下是两个计算幂的递归算法:

def power(x, n):
    if n == 0:
        return 1
    else:
        return x*power(x, n-1)
    

该递归算法的时间复杂度为O(n)

def power(x, n):
    if n == 0:
        return 1
    mid = n // 2
    partial = power(x, mid)
    result = partial * partial
    if n % 2 == 1: 
        result *= x
    return result 

该递归算法的时间复杂度为O(logn)

3.由于python解释器必须保持跟踪每个嵌套调用的状态的活动记录,所以其会占用较多内存,为解决这个问题,有两种办法,首先是使用堆栈结构来管理递归结构自身的嵌套,虽然只是把内存结构从解释器变换到堆栈,但是也许能够通过只存储最小限度的必要信息来减少内存使用。更好的情况是递归的某些情况可以在不使用任何辅助存储空间的情况下被消除,譬如说尾递归(执行的任何递归调用是在这种情况下的最后操作,递归调用的结果立即返回,如前一个博客中的二分查找算法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值