gpt4 book ai didi

java - 递归输出歧义

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:31 26 4
gpt4 key购买 nike

好吧,我只是在学习递归,我对某一点感到困惑。这是代码

public class RecursiveDemo {
public static void showRecursion (int num) {
System.out.println("Entering method. num = " + num);
if (num > 1) {
showRecursion(num - 1);
}
System.out.println("Leaving method. num = " + num);
}

public static void main(String[] args){
showRecursion(2);
}
}

我得到的输出是:

Entering method. num = 2
Entering method. num = 1
Leaving method. num = 1
Leaving method. num = 2

我的问题是为什么我得到输出“Leaving method.num = 2”。它不应该在“Leaving method.num = 1”处停止吗,因为 num 已经达到 1 了?

最佳答案

一旦此方法的原始调用离开 if 语句,它就会传递给 System.out.println("Leaving method.num = "+ num);。由于您最初使用值 2 调用消息,因此 2 是这部分代码的 num 的值。

你的代码是这样运行的(伪代码):

Start First Call
if statement
Start Second call
Skips if statement
Print from Second Call
End of Second Call
End of if Statement
Print From First Call
End of First Call

看来你对递归有根本性的误解。当您使用 (num-1) 作为参数调用您的方法时,父调用(在本例中为第一次调用)保留值 num 作为其参数,这在本例中是 2

关于java - 递归输出歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867941/

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