繁体   English   中英

这种递归方法有什么问题? (java)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM