酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

def hanoi(n, source, target, auxiliary): if n == 1: print(f"Move disk 1 from {source} to {target}") else: # 将n-1个盘子从source移动到auxiliary(借助target) hanoi(n-1, source, auxiliary, target) # 移动第n个盘子 print(f"Move disk {n} from {source} to {target}") # 将n-1个盘子从auxiliary移动到target(借助source) hanoi(n-1, auxiliary, target, source) # 示例:移动3个盘子,从A到C,借助B hanoi(3, 'A', 'C', 'B')

你提供的这段代码是一个经典的汉诺塔问题的递归实现。整体代码逻辑清晰,实现正确,但可以从代码注释和代码输出信息方面进行一些优化。 优化后的代码 ```python def hanoi(n, source, target, auxiliary): # 当只有一个盘子时,直接将盘子从源柱子移动到目标柱子 if n == 1: print(f"将编号为 1 的盘子从 {source} 移动到 {target}") else: # 递归调用 hanoi 函数,将 n-1 个盘子从源柱子移动到辅助柱子,借助目标柱子 hanoi(n - 1, source, auxiliary, target) # 移动第 n 个盘子从源柱子到目标柱子 print(f"将编号为 {n} 的盘子从 {source} 移动到 {target}") # 递归调用 hanoi 函数,将 n-1 个盘子从辅助柱子移动到目标柱子,借助源柱子 hanoi(n - 1, auxiliary, target, source) # 示例:移动 3 个盘子,从 A 到 C,借助 B hanoi(3, 'A', 'C', 'B') ``` 额外注意的逻辑点 1. 递归调用时参数的顺序很重要,要确保正确传递源柱子、目标柱子和辅助柱子。 2. 递归函数要有终止条件,这里的终止条件是 `n == 1`,如果没有这个条件,函数会无限递归导致栈溢出。 3. 对于较大的 `n` 值,汉诺塔问题的移动步数会呈指数级增长,可能会导致程序运行时间过长和占用大量内存。 [2025-06-17 14:19:42 | AI写代码神器 | 386点数解答]

相关提问