在递归函数中使用 Java 自减运算符

Using Java decrement operator in a recursive function

这是一个递归函数 -

private void printVar01(int t){
    if(t != 0){
        logp.info("o: "+t);
        printVar01(t-1);
    }
}

功能相同,稍作修改 -

private void printVar02(int t){
    if(t != 0){
        logp.info("o: "+t);
        printVar02(t--);
    }
}

如果我传入一个像 4 这样的整数值,printVar01 会按预期工作,其中 t 在连续的递归调用中递减为 0,最终导致程序退出。

对于 printVar02,t 保持在值 4。

为什么?我假设这与变量赋值有关 and/or 如何将值传递给函数。

t-1 不会改变 tt-- 会改变。

  • t-1 在不影响 t
  • 的实际值的情况下为您提供新值
  • t-- 给你 t 而不是减少 t
  • 的值

我认为 printVar02 应该可以正常工作并且在 printVar01 中值保持不变。


对于DoubleMa

的评论

actually 01 will works not 02, in 01 t is changing, but in 02 the function is calling itself before changing the value of T, he just need to use --t;

我也肯定怀疑递归调用。

如果你的意思是printVar = printVar01 = printVar02.

如果您递归调用 printVar,那么 t-1 将起作用,因为递归调用将使它起作用,并且在 t-- 中,它每次都会传递相同的值 4这是一个后递减使用预递减 --t 代替。

只需使用 --t 而不是 t--

private static void printVar02(int t){
if(t != 0){
    logp.info("o: "+t);
    printVar02(--t);
}

Post decrement 在语句printVar(t--)执行后将值减1。因此,每次将 4 传递给函数时。
使用应该使用 --t 而不是先递减。