gpt4 book ai didi

c# - 递归在 C# 中的工作原理

转载 作者:行者123 更新时间:2023-11-30 18:56:58 26 4
gpt4 key购买 nike

这是我的代码

using System;
public class Program
{
public static void Method(int flowerInVase)
{
if (flowerInVase > 0)
{
Method(flowerInVase - 1);
Console.WriteLine(flowerInVase);
}
}

public static void Main()
{
Method(3);
}
}

我对 Console.WriteLine(flowerInVase); 行感兴趣,该方法会调用自身,直到它被条件终止。只有在那之后,当堆栈已满时,它才会弹出上面的每个方法,并且控制台会从最小的 1、2、3 开始写入数字。

为什么 console.writeline 仅在堆栈弹出时才起作用,为什么它不在方法到达终止的途中写入数字,例如 3、2、1?编译器仅在完成递归时才使用 writeline。

最佳答案

调用的结构如下所示。也许这种可视化会帮助您理解为什么数字打印 1、2、3 而不是 3、2、1:

Method(3);
flowerInVase > 0 ?
Yes - Method(2);
flowerInVase > 0 ?
Yes - Method(1);
flowerInVase > 0 ?
Yes - Method(0);
flowerInVase > 0 ?
No
WriteLine(1);
WriteLine(2);
WriteLine(3);

原因是因为您对 Method(flowerInVase - 1) 的调用发生在对 WriteLine(flowerInVase) 的调用之前。在有机会打印它所在的数字之前,执行会跳转到该方法的另一个副本。

关于c# - 递归在 C# 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14613273/

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