2015-09-07 19 views
0

这是 Tower of Hanoi: Recursive Algorithm汉诺塔:递归算法使用神秘的硬编码常量6

的后续问题,其中该算法的基本原理是很好的解释。

但是我有一个稍微不同的实现这个算法在这里,我不完全理解(代码是从一所大学演讲,所以我不能链接到任何来源):

// k = nr. of discs, a = start peg, b = destination peg 
public static void hanoi(int k, int a, int b) 
{ 
    if(k > 0) 
    { 
     hanoi(k - 1, a, 6 - a - b); // 1. move (k-1) discs to temporary peg 
     System.out.println("" + k + ": " + a + " => " + b); // 2. move k. disc from a to b 
     hanoi(k - 1, 6 - a - b, b); // 3. move (k-1) discs from temporary peg to peg b 
    } 
} 

原则与其他主题相同(据我了解),但我不明白'6-a -b“中的'6'是从哪里来的,有人可以解释吗?

回答

1

6 - a - b来自(1 + 2 + 3)= 6并给出“其他”挂钩的索引:

a = 1, b = 3 

6 - a - b = 2