C#递归函数调用:此函数如何不无限调用自身?

时间:2019-02-06 09:29:35

标签: c# recursion

我对下面的代码如何从第一次被调用开始就无限循环感到困惑。

`public void Move(int discs, Stack<int> from, Stack<int> to, Stack<int> auxiliary)
{
    if(discs > 0)
    {
        Move(discs - 1, from, auxiliary, to);

        to.Push(from.Pop());
        MovesCount++;
        MoveCompleted?.Invoke(this, EventArgs.Empty);
        Move(discs - 1, auxiliary, to, from);
    }
}`

代码将如何超越第一个Move()?

1 个答案:

答案 0 :(得分:3)

这很简单,当discs <= 0开始放松时。

每次调用Move(discs - 1,...)都会减少光盘,依此类推。基本上,第一个传入的数字只是一个级别深的变量