我对Java编程比较陌生,我刚刚开始学习递归,但我似乎无法弄清楚这种方法是如何工作的.
private static int mystery(int w) {
{
if (w < 0) return 0;
int x = mystery (w-2);
return w - x;
}
}
Run Code Online (Sandbox Code Playgroud)
每当输入100这样的变量时,输出50.当输入200时,输出100.当输入2时,输出2.当输入25时,输出13.我不确定这种方法是如何工作的,我正试图绕过它.
我目前查看它的方式,如果你输入100,它将绕过第一个return语句,因为它大于0.当它到达第二行时,它会做100-2,这会带来98,然后转到第三行并执行100 - 98 = 2.然后返回到原始呼叫.
我知道我搞砸了神秘(w-2)方法的第二行.我假设它会再次将w-2的结果带回到方法的开头,并且它将继续一遍又一遍地执行该方法,直到w小于0,无论答案如何都应该再次输出0.但事实并非如此,我不知道为什么.
谁能解释一下这里发生了什么?
Fra*_*lić 13
你缺少的是,在第二行它不仅仅做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)
Run Code Online (Sandbox Code Playgroud)
以w = 10为例.我希望你现在能更好地理解它.