计算2的力量,java

Upv*_*ote 0 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到了很多错误

return (2*zweiHochPositiv(exponent--));
Run Code Online (Sandbox Code Playgroud)

但我不知道可能出错了什么.

cdh*_*wie 7

更换

return (2*zweiHochPositiv(exponent--));
Run Code Online (Sandbox Code Playgroud)

return (2*zweiHochPositiv(exponent - 1));
Run Code Online (Sandbox Code Playgroud)

exponent--计算exponent变量的值,然后递减它.所以当你打电话时zweiHochPositiv(1),方法会zweiHochPositiv(1)再次调用.

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

  • @barti_ddu:你更喜欢precrement - 变量`exponent`从不再使用,因此你只需减去一个并将值存储在一个永远不会再使用的变量中.换句话说,`exponent - 1`不执行任何不必要的内存写入,而`--exponent`执行.这似乎是一种微观优化,但实际上它是一种风格问题.你为什么要修改一个你永远不想再使用的变量? (5认同)

dar*_*ioo 5

你需要使用前缀版本--.

这应该工作:

return (2*zweiHochPositiv(--exponent));
Run Code Online (Sandbox Code Playgroud)

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

--exponent 将它的值降低一,所以你应该得到理想的行为.