Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:堆栈溢出错误-简单递归_Java_Recursion_Overflow - Fatal编程技术网

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
。在手机上输入与否并不重要。修复您发布的代码中的任何拼写错误。如果您发布的代码有拼写错误,我们无法很好地帮助您。请修理。目前它不是有效代码。你建议我怎么做?