码迷,mamicode.com
首页 > 其他好文 > 详细

尾递归是什么鬼?

时间:2018-12-03 21:07:43      阅读:487      评论:0      收藏:0      [点我收藏+]

标签:解决方案   调用   级别   占用   语言   优点   tle   递归函数   帮助   

“普通程序员使用迭代,天才程序员使用递归”    大家都说递归好用,却也都在抱怨递归过程占用内存的弊病。

 

  以上是博主学习编程以来一直困惑的问题,能不能使用外部给的一个储存空间,使用一种近似for循环的机制解决递归爆栈,但是总有一些细节感觉不妥。这过程中内存问过一些比我牛的大佬,仍没能得以解决,知道在《图解算法》中看到“尾递归”这三个字。。。

 

聊聊尾递归,说尾递归,首先要说说尾调用和递归这两个小概念:

  “尾调用”是指一个函数里的最后一个动作是一个函数调用的情形:即这个调用的返回值直接被当前函数返回的情形。这种情形下该调用位置为尾位置。(维基百科这样解释)

  “递归”就是程序不断的调用自己本身,递归函数调用顺序:

        a.调用开始前,调用方(或函数本身)会往栈上压相关的数据,参数,返回地址,局部变量等   

        b.执行函数   

        c.清理栈上相关的数据,返回

 

  “尾递归”:顾名思义,就是兼顾“尾调用”和“递归”两者优点的一种不同的“递归”。这一种依赖于编译器的帮助实现的递归方式,并不是每一种语言都可以实现。

      C语言可以实现,python就不能实现这种很奇妙的递归方式。

 

尾递归了解了,防止递归爆栈的方式也知道了,但是python中的递归内存问题还是本人的困惑,希望有一天,能和龟叔级别的人物聊聊类似的问题的解决方案。

 

努力更新中。。。

 

博客参考,大家有兴趣也可以看下:

尾递归是个什么鬼

尾递归是什么鬼?

标签:解决方案   调用   级别   占用   语言   优点   tle   递归函数   帮助   

原文地址:https://www.cnblogs.com/pupilheart/p/10060705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!