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

06odsfpq  于 2022-11-27  发布在  Java
关注(0)|答案(3)|浏览(141)

这里有一个递归函数-

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,printVar 01将按预期工作,其中 t 在连续的递归调用中递减到0,最终导致程序退出。
对于printVar 02,t 保持为值4。
为什么?我假设这与变量赋值和/或值如何传递给函数有关。

vddsk6oq

vddsk6oq1#

t-1不会改变t,而t--会改变。

  • t-1会提供新值,而不会影响t的实际值
  • t--会提供t,然后减少t的值

我认为printVar02应该可以正常工作,在printVar01中,值保持不变。
对于DoubleMa的注解
实际上01不会对02起作用,在01中t是变化的,但是在02中函数在改变T的值之前调用它自己,他只需要使用--t;

  • 我也绝对怀疑递归调用 *

如果你的意思是
如果你递归调用printVar,那么t-1将作为一个递归调用来工作。它将使它工作,并且在t--中,它将每次传递相同的值4,因为它是一个后递减。请改用前递减--t

envsm3lx

envsm3lx2#

只需使用--t代替t--:

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

uubf1zoe3#

后置减量在执行printVar(t--)语句后将值减1。因此,每次将4传递给函数。
您应该使用--t,它首先执行递减。

相关问题