python | 递归踩坑

Python | 递归有坑几何?!

用对数器检验自己写的归并排序时,遇到关于递归的那些坑:

自己给单个例子检验归并排序时没有问题,但是用到对数器时,随机生成的数组大小不定,就会出错

这篇博客的都遇到了

似乎没法解决,要么改成非递归,要么用尾递归优化算法(tail recursion optimization TCO)
哎,遇到没见过的尾递归
什么是尾递归?
知乎上看到一个评论讲得很清楚,摘录下来:

原帖戳这里

function story() {
​ 从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story() // 尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。
}
function story() {
​ 从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story(),小和尚听了,找了块豆腐撞死了 // 非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。
}

那么如何优化尾递归
在编译器处理过程中生成中间代码(通常是三地址代码),用编译器优化。

然后发现,我的归并排序不是尾递归形式,而且,python没有尾递归优化,所以无解
暂时先不用对数器检验了,后面搞懂了再更新。。。

posted @ 2022-08-10 14:18  万国码aaa  阅读(36)  评论(0编辑  收藏  举报