我正在尝试创建一个找到“三角数”和“星号”值的程序。但是,当程序分支到第二个功能等时,我有点困惑。任何帮助都表示赞赏!
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;
}
}
答案 0 :(得分:4)
return isTriangularNumber(n,(count++), triangularNumber);
在上面invocation
中,count++
仅评估为count
。因此,在每次调用时,您实际上都传递了count
的未更改值。因此if
条件: -
if (count<=n)
如果第一次调用为真,将始终被评估为true
。因此,使用无限方法调用填充堆栈。
您的调用应该是++count
: -
return isTriangularNumber(n,(++count), triangularNumber);