特定的递归方法在Java中是如何工作的?来自ThinkJava书籍的练习6.6

特定的递归方法在Java中是如何工作的?来自ThinkJava书籍的练习6.6,java,recursion,Java,Recursion,大家好。我需要你的帮助。停留在唐尼和梅菲尔德的“思考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); i

大家好。我需要你的帮助。停留在唐尼和梅菲尔德的“思考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内部发生的情况。因此,get recurse=1、recurse=2、recurse=6。但它们是如何产生的呢

prod(1, 4)
召唤

哪个叫

prod(1, 2)
prod(1, 1) 
哪个叫

prod(1, 2)
prod(1, 1) 
返回1

然后

然后

然后


我经常觉得人们试图将递归视为与调用方法不同的概念;碰巧该方法与当前方法具有相同的名称。如果您复制了该方法,使
prod
调用
prod1
prod1
调用
prod2
等,您是否理解。
prod(1, 3) returns n * recurse, which is 3 * 2 = 6
prod(1, 4) returns n * recurse, which is 4 * 6 = 24