Java:堆栈溢出错误-简单递归
这是一个简单的递归程序,我有一个完成问题。我已经在我的手机上重新安装了它,所以忽略和语法错误或丢失的代码。 对于这个特定的算法,我得到堆栈溢出错误的原因是什么Java:堆栈溢出错误-简单递归,java,recursion,overflow,Java,Recursion,Overflow,这是一个简单的递归程序,我有一个完成问题。我已经在我的手机上重新安装了它,所以忽略和语法错误或丢失的代码。 对于这个特定的算法,我得到堆栈溢出错误的原因是什么 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, ++); }
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, ++);
}
你的递归太深了。每次递归地输入函数时,它都会将参数和返回值放在堆栈上 如果递归太频繁,堆栈将溢出 下面是函数对x==7的作用
x = 15
x = 30
x = 15
x = 30
。。。它将无限运行并因此溢出堆栈以下不是有效的Java语法 返回ulam(x,+)
也许,正如其他人所建议的,您希望解决这个问题。什么是
c
?函数不依赖于它。它应该做什么?什么是ulam(x,++)
?现在,对于任何奇数x
,它是一个无限循环,因为x=x*2+1
使另一个奇数大于x
,因此返回该选项。我想你想要x=x/2+1
。在手机上输入与否并不重要。修复您发布的代码中的任何拼写错误。如果您发布的代码有拼写错误,我们无法很好地帮助您。请修理。目前它不是有效代码。你建议我怎么做?