我对 Java 编程比较陌生,而且刚刚开始学习递归,但我似乎无法弄清楚这种方法在我的脑海中是如何工作的。
private static int mystery(int w) {
{
if (w < 0) return 0;
int x = mystery (w-2);
return w - x;
}
}
每当输入 100 这样的变量时,就会输出 50。输入 200 时,输出 100。输入 2 时,输出 2。输入 25 时,输出 13。我不确定这个方法是如何工作的,我正在尝试解决这个问题。
按照我目前的看法,如果你输入 100,它将绕过第一个 return 语句,因为它大于 0。 当它到达第二行时,它将执行 100-2,这会带来 98,然后转到第三行并执行 100 - 98 = 2。然后返回到原始调用。
我知道我搞砸了方法的第二行,其中的谜团(w-2)所在。我假设它会再次将 w-2 的结果返回到方法的开头,并且它将继续一遍又一遍地执行该方法,直到 w 小于 0,无论答案如何,都应该再次输出 0。但事实并非如此,我也不知道为什么。
谁能解释一下这是怎么回事?
最佳答案
您缺少的是,在第二行,它不只是执行 w - 2,而是使用 w - 2 来调用自身。在调用返回之前,它不会进一步执行。如果 w 不 < 0,则第二个调用会调用自身,依此类推,直到达到低于 0 的值,然后返回。如果你想象一下,执行将像这样:
mystery(10)
> skip first line
> x = mystery(8)
> skip first line
> x = mystery(6)
> skip first line
> x = mystery(4)
> skip first line
> x = mystery(2)
> skip first line
> x = mystery(0)
> skip first line
> x = mystery(-2)
> return 0
> return 0 - 0 (0)
> return 2 - 0 (2)
> return 4 - 2 (2)
> return 6 - 2 (4)
> return 8 - 4 (4)
> return 10 - 4 (6)
以 w = 10 为例。希望您现在能更好地理解它。
关于Java 递归方法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188074/