在递归函数的情况下,全局变量如何工作?
我下面有一个代码。为什么这会输出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,递归结束。

08-06 13:02