python | 递归踩坑
Python | 递归有坑几何?!
用对数器检验自己写的归并排序时,遇到关于递归的那些坑:
自己给单个例子检验归并排序时没有问题,但是用到对数器时,随机生成的数组大小不定,就会出错
似乎没法解决,要么改成非递归,要么用尾递归优化算法(tail recursion optimization TCO)
哎,遇到没见过的尾递归
什么是尾递归?
知乎上看到一个评论讲得很清楚,摘录下来:
function story() {
从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story() // 尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。
}
function story() {
从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story(),小和尚听了,找了块豆腐撞死了 // 非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。
}
那么如何优化尾递归
在编译器处理过程中生成中间代码(通常是三地址代码),用编译器优化。
然后发现,我的归并排序不是尾递归形式,而且,python没有尾递归优化,所以无解
暂时先不用对数器检验了,后面搞懂了再更新。。。