作者:匿名用户
链接:https://www.zhihu.com/question/20761771/answer/19996299
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考我在Stackoverflow问的这个问题:
Why does C preserves both goto and while, involving tail recursion
以及:
为什么C语言同时保留‘goto’语句和‘while’,和尾递归有什么关系?
尾递归是什么?
转自知乎
写在后面:
众所周知递归随着深度增加可能出现一些问题 比如爆栈之类的
且占用内存空间大 出入栈麻烦
尾递归相当于把栈的深度用某个参数记录下来
当栈深度到达边界条件时(一般是为0或1时)退出
这样不用记录每一层的数据
只需要执行当前层的操作就可以了
再引用知乎上某用户的回答
function story() {
从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story() // 尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。
}
function story() {
从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story(),小和尚听了,找了块豆腐撞死了 // 非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。
}
作者:匿名用户
链接:https://www.zhihu.com/question/20761771/answer/23254340
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考资料:https://www.cnblogs.com/catch/p/3495450.html
https://www.zhihu.com/question/20761771