2

「三角数」と「六芒星」の両方の値を見つけるプログラムを作成しようとしています。ただし、プログラムが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最初の呼び出しでtrueの場合、常にに評価されます。したがって、スタックを無限のメソッド呼び出しで埋めます。

呼び出しは次のようにする必要があります++count:-

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