def iterativeHanoi(n):
def f(k): return (k%3) if (n%2==0) else (-k%3)
return [(f(move & (move-1)),
f((move|(move-1))+1)) for move in range(1,1 << n)]
输出结果(举例):[(0, 1), (0, 2), (1, 2), (0, 1), (2, 0), (2, 1), (0, 1)]
(0, 1) 表示把第 1 根柱子最上面的盘放到第 2 根上。
我的问题是:
- 为什么可以用位运算符&, | 来输出汉诺塔问题的 solution ,这应该不是一种巧合吧?
- 如果不是巧合,作者是靠什么样的思路想到的?