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