0

我对以下代码如何从第一次调用它的那一刻起不只是无限循环感到困惑。

`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()?

4

1 回答 1

3

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

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

于 2019-02-06T09:31:01.143 回答