我了解此方法在m=1
和n=1
之前所做的一切。当if()
和m=1
出现问题时n=1
之后会发生什么。
public class exc {
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; // how n gets its value here?
return result;
}
}
}
递归的价值是多少?我的意思是prod只产生一个 整数? (因为它有两个整数)
如果,当m = 1且n = 1时,返回值为1,那么为什么程序不会在那里终止?相反,它会在&#34之后终止;返回结果;"在其他地方?
在m = 1且n = 1之后,n为2(递归);如何将n设置为2?是因为2还在记忆中并且必须处理吗?
我查看了this page
我也在不同的线后使用println查看输出,但这也没有帮助。我还使用了调试器。
答案 0 :(得分:1)
当m = 1时,程序返回阶乘。 举个例子:(m = 1,n = 4)
4 != 1 -> so you call recursively prod(1, 3)
3 != 1 -> so you call recursively prod(1, 2)
2 != 1 -> so you call recursively prod(1, 1)
1 == 1 -> you return 1 to the last call
In this call, recurse = 1 and n = 2 so you return 2 to the upper call
Here, recurse = 2, n = 3, so you return 6 to the upper call
Here, recurse = 6, n = 4, so you return 24 to the upper call
END OF FUNCTION, result is 24 which is 4!
每次以递归方式调用函数prod时,暂停当前函数prodA(将其变量的值保存在内存中)以执行新函数prodB,直到prodB将某些内容返回到prodA。然后A继续执行自身(从内存加载其值)