在递归函数中使用 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
不会改变 t
而 t--
会改变。
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 而不是先递减。
这是一个递归函数 -
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
不会改变 t
而 t--
会改变。
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 而不是先递减。