递归和尾递归

2018-08-09  本文已影响25人  夕阳下的不回头

作者:匿名用户

链接:https://www.zhihu.com/question/20761771/answer/19996299

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考我在Stackoverflow问的这个问题:

Why does C preserves both goto and while, involving tail recursion

以及:

What is 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

上一篇 下一篇

猜你喜欢

热点阅读