我想用递归来计算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--));
但我不知道可能出现的问题。
答案 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