汉诺塔:递归算法使用神秘的硬编码常量 6
Tower of Hanoi: Recursive Algorithm Uses Mysterious Hardcoded Constant 6
这是来自
Tower of Hanoi: Recursive Algorithm
这里很好的解释了这个算法的基本原理。
但是我对这个算法的实现略有不同,我并不完全理解(代码来自大学讲座,所以我不能 link 到任何来源):
// 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'是从哪里来的,谁能解释一下?
6 - a - b
来自 (1 + 2 + 3) = 6 并为您提供 "the other" 挂钩的索引:
a = 1, b = 3
比
6 - a - b = 2
这是来自 Tower of Hanoi: Recursive Algorithm
这里很好的解释了这个算法的基本原理。
但是我对这个算法的实现略有不同,我并不完全理解(代码来自大学讲座,所以我不能 link 到任何来源):
// 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'是从哪里来的,谁能解释一下?
6 - a - b
来自 (1 + 2 + 3) = 6 并为您提供 "the other" 挂钩的索引:
a = 1, b = 3
比
6 - a - b = 2