java - Java中具体的递归方法是如何工作的? Think Java 书中的练习 6.6

标签 java recursion

大家。需要你的帮助。陷入了 Downey 和 Mayfield 的“Think Java”中的练习 6.6:

public static void main(String[] args) {
    System.out.println(prod(1, 4));
}
public static int prod(int m, int n) {
    if (m == n) {
       return n;
    } else {
       int recurse = prod(m, n - 1);
       int result = n * recurse;
       return result;
    }
}

prod到底是做什么的?你能解释一下吗?

我知道它需要 1 和 4 作为参数,并首先将它们相互比较。然后,由于 1 不等于 4,它会转到 else 并再次转到 prod 方法,这次带有参数 1 和 3。依此类推。

我在具有中间递归输出的编辑器中运行代码,以查看prod内部发生了什么。因此得到recurse = 1、recurse = 2、recurse = 6。但它们是如何生产的呢?

最佳答案

prod(1, 4)

通话

prod(1, 3)

调用

prod(1, 2)

调用

prod(1, 1) 

返回 1

然后

prod(1, 2) returns n * recurse, which is 2 * 1 = 2

然后

prod(1, 3) returns n * recurse, which is 3 * 2 = 6

然后

prod(1, 4) returns n * recurse, which is 4 * 6 = 24

关于java - Java中具体的递归方法是如何工作的? Think Java 书中的练习 6.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493983/

相关文章:

javascript - 递归函数进行搜索

c++ - 求和数字递归C++

java - 如何在 Java 中通过按钮输入值来创建序列?

java - DirectMemory访问和异常

java - 使用 jdk8 和 groovy 2.4.4- java.lang.InknownClassChangeError 运行 job-dsl-plugin

javascript - 用于 react 递归的多级下拉列表

java - 反转字符串中单词的程序

python - 如何进行递归子文件夹搜索并返回列表中的文件?

java - J 卡片列表?

java - 将 Mapper 替换为 MultithreadMapper 时,映射中的键类型不匹配