【问题标题】:Using Java decrement operator in a recursive function在递归函数中使用 Java 递减运算符
【发布时间】:2015-07-20 01:38:09
【问题描述】:

这是一个递归函数 -

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。

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

【问题讨论】:

标签: java function recursion variable-assignment


【解决方案1】:

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

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

【讨论】:

  • 是的,如果方法名称是 printVar 而不是 printVar02,这是正确的。
  • 他的意思是,当他说“这是一个递归函数”时,我明白他只是在测试他为什么使用 01 和 02
【解决方案2】:

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

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

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


对于DoubleMa的评论

实际上 01 不会在 02 中起作用,在 01 中 t 正在改变,但在 02 中 函数在改变 T 的值之前调用自己,他只是 需要使用--t;

我也绝对怀疑递归调用。

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

如果您以递归方式调用printVar 而不是t-1 将起作用,因为递归调用将使其起作用,并且在t-- 中,它将每次都传递相同的值4,因为它是一个后递减使用前置递减--t

【讨论】:

  • 其实 01 不会在 02 中起作用,在 01 中 t 是变化的,但是在 02 中函数在改变 T 的值之前调用自己,他只需要使用 --t;
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 2014-03-21
    • 2020-08-02
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多