`
RednaxelaFX
  • 浏览: 3015885 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

[转帖] 用C# Generator解决Hanoi塔问题

    博客分类:
  • C#
阅读更多
下面的代码从Iterators in C#: Nothing Beats the Foreach Loop转来。

using System.Collections.Generic;

public enum Peg { A, B, C };

public struct Move {
    public Move( Peg from, Peg to ) { From = from; To = to; }
    public readonly Peg From;
    public readonly Peg To;
}

class TowerofHanoi {
    public static IEnumerable<Move> GenerateMoves(
        int n, Peg from, Peg to, Peg middle ) {
        if ( n == 1 )
            yield return new Move( from, to );
        else {
            foreach ( Move m in GenerateMoves( n - 1, from, middle, to ) )
                yield return m;

            yield return new Move( from, to );

            foreach ( Move m in GenerateMoves( n - 1, middle, to, from ) )
                yield return m;
        }
    }
}

class Program {
    static void Main( string[ ] args ) {
        foreach ( Move m in
            TowerofHanoi.GenerateMoves( 10, Peg.A, Peg.B, Peg.C ) ) {
            System.Console.WriteLine( "From {0} to {1}", m.From, m.To );
        }
    }
}


以前一直没想过generator可以这样用。能让generator自己递归这点相当让我着迷。
最近支持generator的语言也越来越多了。JavaScript也提供了支持。有意思啊……

程序的输出结果放在附件里了。
  • result.zip (290 Bytes)
  • 描述: 程序的输出结果
  • 下载次数: 3
分享到:
评论
3 楼 lwwin 2011-11-16  
本来是过来找yield的用法的,结果看到js也有generator这种有趣的用法就问问=w= 没见过嘛~话说才刚搞清楚,C#的yield和lua的和ruby的和弹幕风的并不都是一回事=0=
2 楼 RednaxelaFX 2011-11-16  
lwwin 写道
还真不知道JS可以generator,是专门的语法么?

…不知道你是怎么读的,但这帖是讲C#的啊…

JS的话你要是看老赵写的Jscex或许也能做类似的事情。或者Mozilla的JavaScript 1.7的generator
1 楼 lwwin 2011-11-16  
翻老帖了

还真不知道JS可以generator,是专门的语法么?

相关推荐

Global site tag (gtag.js) - Google Analytics