2015-05-09 109 views
2

这里使用Java,递减运算符是一个递归funtion -在递归函数

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

相同funtion有轻微的修改 -

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

如果我通过像4,printVar01作品整数值如预期的那样,在连续的recrsive调用中t递减到0,最终导致程序退出。

使用printVar02,t值为4.

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

+1

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html –

+0

是的,我应该读过那个文档两次:)。此外 - http:// stackoverflow。com/questions/484462 /在i-and-i-in-a-loop中的差异 –

回答

2

声明printVar(t--)执行后只使用--t代替T--

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

是的,如果方法名称是'printVar'而不是'printVar02',这是正确的。 –

+1

,他的意思是,当他说“这是一个递归功能” 我确信他只是测试它,为什么他使用01和02 – DoubleMa

3

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--它会通过每一个,因为它是一个使用后减预减量--t,而不是时间相同的值4

+2

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

2

后减量法令值1。因此每次4被传递给函数。
使用应该用-t代替先做减量。