请问循环能代替所有递归吗?


之所以会有这种想法,基于两个理由:

  1. 递归本质上是在进行压栈操作,人脑不易理解,尽管很多人都在尝试,相比之下,循环就容易理解多了。

    这有一篇文章深入地介绍了递归, http://blog.csdn.net/theknotyouknow/article/details/24435291

  2. 循环执行效率比递归高很多。

在知乎上搜了一下,感觉回答的并不是很好,还请各位不吝赐教。

编程 程序员 C++ 算法

抓水母的乌贼 10 years, 7 months ago

能。大学计科有讲这个的。而且反过来也成立。

你想啊,递归调用就是把参数压栈。改成循环,我手动建个栈,每次循环把需要的数据压进去,循环完弹出来不就可以了么。

递归 vs 循环:

  1. 人脑不易理解?你看看著名的斐波那契数列的递归定义,写成递归容易还是循环容易?哪个容易理解取决于你的问题的解是怎么表述的。如果你是解的提出者怎么办?习惯了哪个你肯定会自然而然地用哪个。循环在编程界一直是大多数,所以嘛,你明白了?
  2. 普通递归总是要压栈的。递归的层数多了,栈就要爆了。怎么办呢,有一种叫 尾递归 的优化,也叫 尾调用 。就是每次到返回前的最后一步才进行递归调用,这样的情况就可以保持栈不随着递归过程一直增长。不仅高效,还直观。但是很多问题的尾递归解本身不直观。
天仙一叶冰 answered 10 years, 7 months ago

Your Answer