我对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.但事实并非如此,我不知道为什么.
谁能解释一下这里发生了什么?