算法描述:
汉诺塔主要是有三个塔座X,Y,Z,要求将三个大小不同,依小到大编号为1,2…..n的圆盘从A移动到塔座Z上,要求
(1):每次只能移动一个圆盘
(2):圆盘可以插到X,Y,Z中任一塔座上
(3):任何时候不能将一个较大的圆盘压在较小的圆盘之上
程序实现逻辑:
汉诺塔的算法就3个步骤:
【1】把a上的n-1个盘通过c移动到b。
【2】把a上的最下面的盘移到c。
【3】因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了
erlang程序实现:
%% =============================================================================
%% 参数说明:
%% N:圆盘的数目;A:起始塔标识;B:辅助塔标识;C:目的塔标识
%% =============================================================================
hanoi(N) -> move(N, a, b, c).
move(1, A, _B, C) -> io:format("Move disk 1 from ~p to ~p~n", [A, C]);
move(N, A, B, C) -> move(N - 1, A, C, B),
io:format("Move disk ~p from ~p to ~p~n", [N, A, C]),
move(N - 1, B, A, C).
更详细说明可以参考百度百科:
http://baike.baidu.com/view/191666.htm?fr=aladdin#5_2