2

我正在尝试创建一个程序来查找“三角形数字”和“星号”的值。但是,我对程序何时分支到第二个功能等感到有些困惑。感谢您的帮助!

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;
        }

}
4

1 回答 1

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

在上面invocationcount++ 仅评估为count。因此,在每次调用时,您实际上都在传递不变的count. 因此if条件: -

if (count<=n)

true如果第一次调用为真,则将始终评估为。从而用无限的方法调用填充堆栈。

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

return isTriangularNumber(n,(++count), triangularNumber);
于 2012-12-03T21:00:58.237 回答