计算2的力量,java

时间:2010-12-06 08:14:37

标签: java recursion

我想用递归来计算2的幂。这是我的代码:

class Aufg1{
    public static void main(String args[]){
        int erg = zweiHochPositiv(10);
    }

    public static int zweiHochPositiv(int exponent){
        if(exponent > 0)
            return (2*zweiHochPositiv(exponent--));
        else
            return 1;
    }
}

我在

上遇到了很多错误
return (2*zweiHochPositiv(exponent--));

但我不知道可能出现的问题。

3 个答案:

答案 0 :(得分:7)

替换

return (2*zweiHochPositiv(exponent--));

return (2*zweiHochPositiv(exponent - 1));

exponent--计算exponent变量的值,然后减少它。因此,当您致电zweiHochPositiv(1)时,该方法会再次调用zweiHochPositiv(1)

因此,当使用值>调用此方法时0,将无限递归并最终溢出堆栈。

答案 1 :(得分:5)

您需要使用--的前缀版本。

这应该有效:

return (2*zweiHochPositiv(--exponent));

说明:exponent--实际上永远不会降低exponent的值,因此每次使用相同的值调用递归函数时,这会使您的堆栈失效。

--exponent会将其值减一,因此您应该获得所需的行为。

答案 2 :(得分:1)

我认为这样做的一种有效方法是使用“2的幂”的二进制表示属性 - 它只是1位移位,“指数”次数。

因此,2 ^ 2 = 1<< 2 =(二进制).... 0000 0100 = 4