Java上的StackOverflow错误 - 看不到无限循环?

时间:2012-12-03 20:58:52

标签: java recursion stack-overflow

我正在尝试创建一个找到“三角数”和“星号”值的程序。但是,当程序分支到第二个功能等时,我有点困惑。任何帮助都表示赞赏!

public class Recursion {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int count =0;
                int n = 1;
                int t=0;
                int triangularNumber =0;
                while (n<Integer.MAX_VALUE)
                {
                        t = isTriangularNumber(n,count,triangularNumber);  
                        triangularNumber=0;
                        int starNumber= ((6*n)*(n-1)) + 1;
                        if (starNumber ==t)
                        {
                                System.out.println(t);
                        }
                        n++;
                }      
                if (n==Integer.MAX_VALUE)
                {
                    System.exit(0);
                }
        }


        public static int isTriangularNumber(int n, int count, int triangularNumber)
        {
                triangularNumber =triangularNumber + (n-(n-count));
                if (count<=n)
                {      
                        return isTriangularNumber(n,(count++), triangularNumber);
                }      
                else return triangularNumber;
        }

}

1 个答案:

答案 0 :(得分:4)

return isTriangularNumber(n,(count++), triangularNumber);

在上面invocation中,count++仅评估为count。因此,在每次调用时,您实际上都传递了count的未更改值。因此if条件: -

if (count<=n)
如果第一次调用为真,

将始终被评估为true。因此,使用无限方法调用填充堆栈。

您的调用应该是++count: -

return isTriangularNumber(n,(++count), triangularNumber);