Java:堆栈溢出错误 - 简单递归

时间:2014-02-01 23:24:37

标签: 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, ++);
}

2 个答案:

答案 0 :(得分:1)

你的递归太深了。每次以递归方式输入函数时,它都会将参数和返回值放在堆栈上。

如果经常递归,堆栈会溢出。

这是你的函数对x == 7

的作用
x = 15
x = 30
x = 15
x = 30

...它将无限运行,因此溢出堆栈

答案 1 :(得分:0)

以下内容不是有效的Java语法。

return ulam(x,++);

或许正如其他人所建议的那样,你想解决这个问题。