Java 增量前(+;+;i)和i+;1个字母。为什么他们有不同的行动?堆栈溢出错误
在我写Java 增量前(+;+;i)和i+;1个字母。为什么他们有不同的行动?堆栈溢出错误,java,stack-overflow,pre-increment,Java,Stack Overflow,Pre Increment,在我写res+=countNatNum(++len,sum+I,k,d)时的递归中我有一个堆栈溢出错误。但是当我在len+1res+=countNatNum(len+1,sum+I,k,d)上更改预增量时一切正常。我不明白为什么会发生这种情况,因为我用if(len==3)检查条件 public static int countNatNum(int len, int sum, int k, int d){ int base = 9; if (d > base
res+=countNatNum(++len,sum+I,k,d)时的递归中代码>我有一个堆栈溢出错误。但是当我在len+1
res+=countNatNum(len+1,sum+I,k,d)上更改预增量时代码>一切正常。我不明白为什么会发生这种情况,因为我用if(len==3)
检查条件
public static int countNatNum(int len, int sum, int k, int d){
int base = 9;
if (d > base * k) return 0;
else if (len == k){
if (sum == d){
return 1;
}
else return 0;
}
int res = 0;
int c = (len == 0 ? 1 : 0);
for (int i = c; i <= base; i++){
res += countNatNum(len + 1, sum + i, k, d);
}
return res;
}
}
公共静态int countNatNum(int len,int sum,int k,int d){
int base=9;
如果(d>base*k)返回0;
else if(len==k){
如果(总和=d){
返回1;
}
否则返回0;
}
int res=0;
int c=(len==0?1:0);
对于(int i=c;i如果使用“++”,更新后的值将再次存储。“len+1”不会增加“len”。这是几个方面的一个很好的例子:1.无限递归和2.为什么不应该使用递归