-
递归,在程序运行过程中调用自己,每一级递归都需要调用函数,会创建新的栈空间,随着递归深度的增加,创建的栈越来越多,造成栈的爆炸
-
尾递归基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不是创建新的调用栈,类似迭代的实现,时间和空间上均优化了一般的递归
-
存在的问题,python不支持尾递归,递归深度超过1000时会报错
-
有人对python的尾递归写了一个优化版,让python突破递归调用1000次的限制
-
实现一个 tail_call_optimized 装饰器,通过装饰器来在每次递归调用函数前,抛出了一个异常,然后将这次调用的参数写进异常对象,再再蹦床函数里捕获这个异常,并将参数读出来,然后进行迭代调用。
-
在递归函数调用时,先插入一个 trampolining(蹦床) 函数。在用这个蹦床函数来调用真正的递归函数,并且修改递归函数的函数体,不让它再次进行递归的函数调用,而是直接返回下次递归调用的参数,由蹦床函数来进行下一次递归调用。这样一层一层的递归调用就会变成由蹦床函数一次一次的迭代式函数调用。
对尾递归的理解
最新推荐文章于 2021-08-10 22:56:59 发布