有人可以给我关于如何创建GetEnumerator()的递归版本的建议吗?众所周知的河内塔问题可以作为一个与我遇到的实际问题相当的例子.显示高度为n的磁盘堆栈的所有移动的简单算法是:
void MoveTower0 (int n, Needle start, Needle finish, Needle temp)
{
if (n > 0)
{
MoveTower0 (n - 1, start, temp, finish);
Console.WriteLine ("Moving disk from {0} to {1}", start, finish);
MoveTower0 (n - 1, temp, finish, start);
}
}
Run Code Online (Sandbox Code Playgroud)
我真正想要做的是建立一个实现IEnumerable的HanoiTowerMoves类,这使我可以按如下方式迭代所有移动:
foreach (Move m in HanoiTowerMoves) Console.WriteLine (m);
Run Code Online (Sandbox Code Playgroud)
迈向GetEnumerator()实现的第一步似乎摆脱了MoveTower参数.这可以通过使用堆栈轻松完成.我还介绍了一个Move类,它将参数组合成一个变量.
class Move
{
public int N { private set; get; }
public Needle Start { private set; get; }
public Needle Finish { private set; get; } …Run Code Online (Sandbox Code Playgroud)