gpt4 book ai didi

java - 即使不满足条件,Java 是否完全了解整个递归方法?

转载 作者:行者123 更新时间:2023-12-02 01:34:23 25 4
gpt4 key购买 nike

我想以非常简单的方式理解如果Java在方法中不满足条件时读取超出条件,我知道如果不满足条件它不会执行该部分?或者甚至不想浪费时间阅读该部分?

我已将代码附加到此消息中以供您查看。

我最初以为当我运行代码时,我只会看到一个数字:-1 就是这样,但它向后列出了所有数字。

我明白为什么它们在 Java 堆栈中出现倒退。所以,显然,Java Stack 上有大量的递归调用(如果说错了,请原谅。)

但在我看来,只有 Java 在每次递归时解释/读取整个方法,每次执行整个整个代码,并保存 n 的值,但选择不这样做,才能做到这一点输出结果或将其搁置(但已经在幕后执行)。

谢谢大家,迫不及待地想阅读您的答案。

附注我是一名 Java 学生,目前正在学习 Java 结构。所以你的话越简单我就越能理解你。但无论任何人试图帮助我,我都很感激。

public class Recursion {

public static void main(String[] args) {

reduceByOne(10);

}

public static void reduceByOne(int n) {
if(n >= 0) {
reduceByOne(n-1);
}

System.out.println(n);
}
}

最佳答案

我不确定这里的问题是什么。一切都很明显。让我们一步一步地看一下。为了缩短时间,让我们假设我们从 main 调用 reduceByOne(1) 而不是 reduceByOne(10)

  • main 方法被调用,并以 n==1 调用reduceByOne
  • reduceByOne 在 n==1 时被调用,if 语句检查 n 并在 n'==0 时再次调用 reduceByOne(我们称其为“reduceByOne'”),因此
  • reduceByOne' 使用 n'==0 进行调用,if 语句检查 n 并使用 n''==-1 调用 reduceByOne'',因此
  • reduceByOne'' 被调用时使用 n''==-1,if 语句检查 n 并且不执行任何操作。下一行是 println n'' ,打印出 -1。然后reduceByOne''返回,将控制权传递回reduceByOne'
  • reduceByOne' 在 if 语句后继续,打印 n',输出 0 并返回,将控制权传递回 reduceByOne
  • reduceByOne 在 if 语句后继续,打印 n,输出 1 并返回,将控制权传递回主方法
  • main 方法没有更多行并且存在。 JVM 退出是因为 main 方法已经退出。结束。

附注让我们尝试以图形方式呈现流程:

public static void main(String[] args) {
reduceByOne(1) => { // call of reduceByOne with n==1
if( 1>=0 ) {
reduceByOne(0) => { // call of reduceByOne' with n'==0
if(0>=0) {
reduceByOne(-1) => { // call of reduceByOne'' with n''==-1
if(-1==0) // does nothing
System.out.println(-1)
} // return back to reduceByOne'
}
System.out.println(0)
} // return back to reduceByOne
}
System.out.println(1);
} // return back to main
}

关于java - 即使不满足条件,Java 是否完全了解整个递归方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com