用Erlang实现汉诺塔

递归的算法很简单,直接上代码

 1 -module(hanoi).
 2 -export([start/1]).
 3 
 4 start(N) ->
 5     move(N, a, b, c).
 6 
 7 %% Source:源圆柱,Middle:中间圆柱,Destination:目的圆柱
 8 -spec move(N::integer(), Source::atom(), Middle::atom(), Destination::atom()) -> ok.
 9 move(1, Source, _Middle, Destination) ->
10     io:format("~w from ~w to ~w~n", [1, Source, Destination]);
11 move(N, Source, Middle, Destination) ->
12     move(N-1, Source, Destination, Middle),
13     io:format("~w from ~w to ~w~n", [N, Source, Destination]),
14     move(N-1, Middle, Source, Destination).

 附录:在网上看见一个用list comprehension计算排列的算法,代码如下

1 permutation([]) -> [[]];  
2 permutation(L)  -> [[H|T] || H <- L, T <- permutation(L--[H])].

list comprehension语法的精妙可见一斑

posted on 2012-12-12 10:36  应无所住而生其心  阅读(309)  评论(0)    收藏  举报

导航