递归如何转换成非递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归如何转换成非递归相关的知识,希望对你有一定的参考价值。

  1. 为什么要讲递归呢?

    因为递归很复杂,需要很长时间,见识过很多例子,包括了解好多数据结构才能深刻体会到如何使用递归,有时候,我们也不知道是否可以使用还是不能使用递归,其实可以通过非递归思想去理解,然后通过递归算法来进行编程实现,都是一个很好的方向,递归的本质是栈。

  2. 递归一般使用栈和队列使用区别?

    通过很多例子发现凡是使用深度优先都是使用递归算法,凡是使用层次遍历的使用的都是队列。这个让我们怎么理解,我个人发现一个小的情况就是,递归它一般都是有一定的关系的,如深度优先遍历,它都是一个结点和另外一个结点之间有连接关系。这样才可以深度遍历,一直可以向下遍历。纵观层次遍历,它们之间没有什么关系,所以可以使用队列来遍历。

  3. 递归还分为单支递归和多支递归?

    单支递归一个方向的,就是一个递归调用,多支递归可以有多个递归调用。一个递归调用,他可以通过普通循环来实现,并且不用进行回溯,它用临时变量来保存结果的,普通循环可以完成的。(但是递归底层运行时候,是进行自底向上的),多支递归是要进行回溯的,它使用栈来保存中间结果的,需要通过循环栈来实现。

  4. 递归从外部看,以及转化成非递归,在外部看来是由上至下,从内部看是由下至上的,我们分析问题时,和写代码都是站在外部看。

  5. 经典讲解,请看http://www.linuxidc.com/Linux/2014-06/102934.htm

本文出自 “简答生活” 博客,转载请与作者联系!

以上是关于递归如何转换成非递归的主要内容,如果未能解决你的问题,请参考以下文章

3.4.4 利用栈将递归转换成非递归的方法

最新情报:所有的递归都可以改写成非递归?

最新情报:所有的递归都可以改写成非递归?

最新情报:所有的递归都可以改写成非递归?

汉诺塔的非递归算法

递归如何转换为非递归