[英]What is wrong with this recursive method? (java)
该方法用于计算器,应该返回log2(n)。 正确编写了所有使用的方法(负号拼写错误的正负号)等。 s(n)仅将n加1,而p(n)减1。
当我在主体中调用该方法时,它得到正确的余数,但始终返回0作为答案。 这使我感到困惑。 我确定它与以下事实有关:每次调用该方法时,我都会将答案重新初始化为0,但这不应该没关系,因为它总是在返回任何值之前将其设置为x?
x是方法外部的私有静态变量,已设置为0。
public static long v(long n)
{
long answer =0;
if (power(2,x) > n)
{
x = p(x);
setRemainder(monus(n,power(2,x)));
answer = x;
}
else if(power(2,x) ==n)
{
setRemainder(0);
answer = x;
}
else
{
x = s(x);
v(n);
}
x=0;// reset x so it can be used again.
return answer;
}
谁能帮我?
您应该更改以下行:
v(n);
至:
answer = v(n);
现在,如果执行了最后一个else块,则answer变量不会更改-仍为0。
如注释中所述,您可以在else
语句中进行递归调用,但是在递归调用返回时不要将其分配给任何内容。
考虑一下:
在您的第一个调用中: x = 0
所以可能转到else语句并输入递归。 在递归的某个点,您的条件语句之一将为true,在这种情况下,将返回answer
,但不会以递归调用堆栈的方式分配answer
。
所以看起来像这样:
1: v(n) // this calls v(n) again
2: v(n) returns answer = x // this returns an answer
1: returns answer = 0 // now the return falls down a level to where the recursive
// call was and the answer is lost as was not assigned
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.