汉诺塔经典递归问题

在其他语言学习递归思想的时候,有一个经典的问题就是汉诺塔的解法:

当然这个在M语言中也是可以玩的,并且代码比其他任何语言都要简洁。
思路:利用递归思想,假设有n层,最上面的n-1层已经从A借助C移到B,然后将最大的盘子从A借助B移到C,最后再将n-1层从B借助A移到C,一直递归下去。M中@代表递归,再次调用该函数。

let
    move = (n,a,b,c)=>if n=1 then {a&"->"&c} else @move(n-1,a,c,b) & @move(1,a,b,c) & @move(n-1,b,a,c),
    result = move(6, "A", "B", "C")
in
    result

4 Replies to “汉诺塔经典递归问题”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注