java - 在java中使用全局变量递归

标签 java recursion global-variables

全局变量在递归函数中如何工作? 我在下面有一个代码。为什么这会输出 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 之前永远不会到达打印语句,因此当递归展开时它只打印 0。

值因 giValue--; 行而改变。 giValue 不是全局变量。它是您的 Demo 类的一个实例变量,当您创建 Demo 实例时,它的值被初始化为 6。

该方法有 7 次调用 - 初始调用和 6 次额外的递归调用。前 6 次调用递减 giValue,因此在第 7 次调用期间其值为 0,递归结束。

关于java - 在java中使用全局变量递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000830/

相关文章:

java - JBoss 6 中实例之间共享属性文件

java - 扫描仪正则表达式分隔符问题

java - 如何递归获取Java中的所有组合?

javascript - 在 javascript 中,访问 'window.Math' 比访问没有 'Math' 的 'window.' 对象慢还是快?

php - symfony2中的全局变量在php模板中使用

java - 如何使 GetLastError 可靠地与 JNA 一起工作?

Java Exception 从 Resource .wav 中读取流

c - 在二叉树中插入一个节点 - 将迭代转换为递归

c++ - 无递归初始化

global-variables - def参数的使用