gpt4 book ai didi

java - java中的递归与意外的输出

转载 作者:行者123 更新时间:2023-12-01 18:27:02 26 4
gpt4 key购买 nike

public class testing
{
public static void printnum(int a)
{
System.out.println( a);
if(a <= 3)
{
System.out.println("recursed");
printnum(a+1);
}
System.out.println( a);
}

public static void main(String...s)
{
printnum(1);
}
}

输出:

1
2
3
3
2
1

我预计程序会在最后 3 结束,但我不明白下一个“2”和“1”来自哪里?它如何以及为何递减?

最佳答案

您有两次对 System.out.println(a) 的调用。如果你区分它们,你会发现更容易理解:

public static void printNum(int a)
{
System.out.println("Before recursion: " + a);
if(a <= 3)
{
System.out.println("Recursing");
printNum(a + 1);
}
System.out.println("After recursion: " + a);
}

基本上,您的调用嵌套 - 您最深嵌套的调用将打印:

Before recursion: 4
After recursion: 4

...然后它将返回到对 printNum(3) 的调用,这将打印:

After recursion: 3

并返回到对 printNum(2) 的调用,这将打印

After recursion: 2

等等

现在也是学习如何使用调试器单步调试代码、查看每个点的堆栈等的好时机。

关于java - java中的递归与意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25769798/

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