在递归函数的情况下,全局变量如何工作?
我下面有一个代码。为什么这会输出7 0作为输出?
int giValue=6;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo obj1=new Demo();
obj1.fnReverse();
}
public void fnReverse(){
if(giValue>0){
giValue--;
fnReverse();
}
System.out.println(" "+giValue);
}
我想知道全局变量值保存在哪里,以及值如何更改?
谢谢
最佳答案
它输出7个零,因为在每个递归调用结束时,您正在打印giValue
的值。由于该方法直到giValue
到达0才到达print语句,因此递归展开时它仅输出0s。
该值由于giValue--;
行而改变。 giValue
不是全局变量。它是您的Demo
类的实例变量,在创建Demo
实例时其值初始化为6。
该方法有7个调用-初始调用和6个其他递归调用。前6个调用减量giValue
,因此在第7个调用期间,其值是0,递归结束。