在其他语言学习递归思想的时候,有一个经典的问题就是汉诺塔的解法:
当然这个在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
汉诺塔想起了小时候玩的文曲星
暴露年龄了。
我家里还珍藏一台。软排线都已经断了,当时花了400块
递归写法希望能有更多例子,题目看懂了,但如何组织公式绕不清楚。
确实简洁到让人目瞪口呆