我对下面的代码如何从第一次被调用开始就无限循环感到困惑。
`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()?
答案 0 :(得分:3)
这很简单,当discs <= 0
开始放松时。
每次调用Move(discs - 1,...)
都会减少光盘,依此类推。基本上,第一个传入的数字只是一个级别深的变量