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