递归的算法很简单,直接上代码
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语法的精妙可见一斑