简单的while循环重复最后一个值

Ric*_*d H 0 .net c# loops

致力于我的.net基础认证.在练习测试中,有一个问题,一些示例代码要求输出.正确的答案是......循环3循环2循环1循环1

问题是我不明白为什么它重复最后一个"循环1".我把它放入VS2015并发现它实际上是正确的.注意,我不是要求修复代码,我要求解释为什么它重复最后一个值.我搜索过,但没有找到明确的答案.所以,这是代码.

namespace ConsoleApplication5
{
class Program
{
    private static int WriteToConsole(int NumWrites)
    {
        int i = NumWrites;
        while (i > 0)
        {
            Console.WriteLine("loop {0}", i);
            i = WriteToConsole(i - 1);
        }
        return NumWrites - 1;
    }

    static void Main(string[] args)
    {
        WriteToConsole(3);
        Console.ReadKey();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

viv*_*una 8

请研究堆栈展开.

我会尽力给你一个想法.

  • 调用命令将是WriteToConsole(3)然后WriteToConsole(2)然后WriteToConsole(1)然后WriteToConsole(0).
  • WriteToConsole(0)将返回-1到WriteToConsole(1),因此它不会再循环while循环.
  • WriteToConsole(1)将返回0到WriteToConsole(2),因此它不会再循环while循环.
  • WriteToConsole(2)将返回1到WriteToConsole(3),因此它将满足条件(i> 0)并写入控制台.