美文网首页
递归的Java实现

递归的Java实现

作者: L_live | 来源:发表于2018-10-19 22:15 被阅读0次

递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解过程,去的过程叫“递”,回来的过程叫“归”。

递归需要满足的三个条件:1. 一个问题的解可以分解为几个子问题的解;2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样;3. 存在递归终止条件。

问题:N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?

分析:如果有大于2级的n级台阶,那么假如第一次跳一级台阶,剩下还有n-1级台阶,有f(n-1)种跳法,假如第一次条2级台阶,剩下n-2级台阶,有f(n-2)种跳法。这就表示f(n)=f(n-1)+f(n-2),即斐波那契数列。假设只有一个台阶,那么只有一种跳法,那就是一次跳一级,f(1)=1;如果有两个台阶,那么有两种跳法,第一种跳法是一次跳一级,第二种跳法是一次跳两级,f(2)=2。

编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。

递归代码要警惕重复计算

为了避免重复计算,我们可以通过一个数据结构(比如散列表)来保存已经求解过的 f(k)。

递归代码要警惕堆栈溢出

我们可以通过在代码中限制递归调用的最大深度的方式来解决这个问题,递归调用超过一定深度(比如 1000)之后,我们就不继续往下再递归了,直接抛出异常。

怎么将递归代码改写为非递归代码?

递归本身就是借助栈来实现的,如果我们自己在内存堆上实现栈,手动模拟入栈、出栈过程,便可以将递归改成非递归。

相关文章

  • 链表

    一、单向链表 单向链表的普通实现 Java实现: Kotlin实现: 单向链表的递归实现 Java实现: 二、双向...

  • Java递归算法详解

    递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的...

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • Java实现文件目录操作书目录

    Java实现文件目录操作之使用IO和NIO创建目录 Java实现文件目录操作之递归遍历目录和文件 Java实现文件...

  • Java实例-目录操作

    1、Java 实例 - 递归创建目录:使用 File 类的 mkdirs() 实现递归创建目录。 public c...

  • Java 目录操作

    Java 实例 - 递归创建目录 以下实例演示了使用 File 类的 mkdirs() 实现递归创建目录 : 编译...

  • 递归的Java实现

    递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解过程,去的过程叫“递”,回来的过程叫“归”。 递归...

  • 递归的Java实现

    算法 数据结构——递归的运行机制:递归的微观解读 递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解...

  • 常用面试代码小Demo

    java递归的简单实现方式 递归计算100以内的数累计求和 记住:使用递归的时候,递归方法一定要有结束条件 单例模...

  • Java实现树结构数据的递归与非递归遍历

    Java实现树结构数据的递归与非递归遍历 ​ 递归,是我们常用的一种方式。在使用的过程中,递归会不断的调用当前...

网友评论

      本文标题:递归的Java实现

      本文链接:https://www.haomeiwen.com/subject/phquzftx.html