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.为什么不应该使用递归