这是一个简单的递归程序,我有一个完成问题。我已经在手机上重新调整了这个,因此忽略了语法错误或丢失了代码。 是否有特定原因我正在为此特定算法获得堆栈溢出错误?
public static int ulam( int x, int c) {
if(x==0)
return 1;
else if(x%2==0)
x=x/2;
else if(x%2==1)
x=x*2 +1;
return ulam(x, ++);
}
答案 0 :(得分:1)
你的递归太深了。每次以递归方式输入函数时,它都会将参数和返回值放在堆栈上。
如果经常递归,堆栈会溢出。
这是你的函数对x == 7
的作用x = 15
x = 30
x = 15
x = 30
...它将无限运行,因此溢出堆栈
答案 1 :(得分:0)
以下内容不是有效的Java语法。
return ulam(x,++);
或许正如其他人所建议的那样,你想解决这个问题。