汉诺塔递归策略详解:
对于 f(n, A, C, B)(将n个盘子从A移动到C,借助B):
-
递归基:
n == 1- 直接移动:
A → C
- 直接移动:
-
递归步骤:
n > 1- 步骤1:将上面的 n-1 个盘子从
A → B(借助C) - 步骤2:将最大的盘子从
A → C - 步骤3:将 n-1 个盘子从
B → C(借助A)
- 步骤1:将上面的 n-1 个盘子从
执行示例(f(3, "A", "C", "B")):
text
css
体验AI代码助手
代码解读
复制代码
css
体验AI代码助手
代码解读
复制代码
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
css
体验AI代码助手
代码解读
复制代码
scala
体验AI代码助手
代码解读
复制代码
object Main {
/*
* 汉诺塔游戏
*
*/
// f(n, a, c, b) 把 n 个盘子从 a → c,借用 b
def f(n: Int, A: String, C: String, B: String): Unit = {
if (n == 1) {
println(s"${A} -> ${C}") // 修正了字符串插值语法
} else {
// 1. 把 n-1 个盘子从 A → B,借助 C
f(n - 1, A, B, C)
// 2. 把最大的盘子从 A → C
println(s"${A} -> ${C}")
// 3. 把 n-1 个盘子从 B → C,借助 A
f(n - 1, B, C, A)
}
}
def main(args: Array[String]): Unit = {
f(3, "A", "C", "B") // 修正了参数,应该是数字3而不是S
}
}