我想用递归来计算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)
但我不知道可能出错了什么.
更换
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调用此方法时,该方法将无限递归并最终溢出堆栈.
你需要使用前缀版本--.
这应该工作:
return (2*zweiHochPositiv(--exponent));
Run Code Online (Sandbox Code Playgroud)
说明:exponent--永远不会实际降低exponent值,所以每次使用相同的值调用递归函数时,这会使您的堆栈失效.
--exponent 将它的值降低一,所以你应该得到理想的行为.
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |