这里有一个递归函数-
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。
为什么?我假设这与变量赋值和/或值如何传递给函数有关。
3条答案
按热度按时间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
。envsm3lx2#
只需使用--t代替t--:
uubf1zoe3#
后置减量在执行
printVar(t--)
语句后将值减1。因此,每次将4传递给函数。您应该使用--t,它首先执行递减。