gpt4 book ai didi

java - 递归返回值

转载 作者:行者123 更新时间:2023-12-01 21:48:27 25 4
gpt4 key购买 nike

过去几周我一直在研究 Java 中的递归。我已经在运行时逐步完成了这个方法(使用 Eclipse),尽管我对实际发生的情况有点困惑。我看到的是 else 语句使变量“n”递减直到 1,然后最终访问 if 语句(如预期)。这就是我迷路的地方。此时,我看到“n”变量从 1 增加到 5(5 是调用该方法时我的输入),重复访问 else 语句返回。

基本上我的问题是为什么在“if”语句中返回 1 后代码会跳转到 else return ?另外,为什么这样做之后它执行了5次而不是跳出该方法?

我知道这是递归的基本概念,但显然我完全忘记了

public static long getFactorial(long n) {

if (n == 1){
return 1;
}
else {
return n * getFactorial(n-1);
}

最佳答案

代码从上一次执行跳转到“else return”。在 n=1 返回 1 后,使用 n=2 的函数调用立即返回 2 * 1 - 这就是突然的原因跳。您混淆了多个单独的方法调用。

invocation(2)
|
invokes -> invocation(1)
| |
| returns 1
returns 2 * 1

在使用 n=2 调用返回一个值后,使用 n=3 调用会立即使用它来返回结果 - 依此类推。这就是为什么有多个“else return”的原因:

inv(5)
5 * inv(4)
5 * 4 * inv(3)
5 * 4 * 3 * inv(2)
5 * 4 * 3 * 2 * inv(1)
5 * 4 * 3 * 2 * 1 [return inv(1)]
5 * 4 * 3 * 2 [return inv(2)]
5 * 4 * 6 [return inv(3)]
5 * 24 [return inv(4)]
120 [return inv(5)]

关于java - 递归返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com