当前位置: 面试刷题>> 汉诺塔 (经典算法题500道)


题目描述补充

汉诺塔(Tower of Hanoi)是一个经典的递归问题。它包含三根柱子和n个不同大小的盘子,这些盘子开始时都按照大小顺序叠放在第一根柱子上,大的在下,小的在上。目标是将这些盘子移动到第三根柱子上,同时满足以下条件:

  1. 每次只能移动一个盘子。
  2. 在任何时候,三根柱子中的每一根都不能出现大盘子在小盘子下面的情况。
  3. 可以利用第三根柱子作为辅助。

示例代码

以下是使用PHP、Python和JavaScript编写的汉诺塔问题的递归解决方案示例。

PHP 示例

<?php
function hanoi($n, $from, $to, $aux) {
    if ($n == 1) {
        echo "Move disk 1 from rod $from to rod $to\n";
        return;
    }
    hanoi($n-1, $from, $aux, $to);
    echo "Move disk $n from rod $from to rod $to\n";
    hanoi($n-1, $aux, $to, $from);
}

// 调用函数,假设有3个盘子
hanoi(3, 'A', 'C', 'B');
?>

Python 示例

def hanoi(n, from_rod, to_rod, aux_rod):
    if n == 1:
        print(f"Move disk 1 from rod {from_rod} to rod {to_rod}")
        return
    hanoi(n-1, from_rod, aux_rod, to_rod)
    print(f"Move disk {n} from rod {from_rod} to rod {to_rod}")
    hanoi(n-1, aux_rod, to_rod, from_rod)

# 调用函数,假设有3个盘子
hanoi(3, 'A', 'C', 'B')

JavaScript 示例

function hanoi(n, from, to, aux) {
    if (n === 1) {
        console.log(`Move disk 1 from rod ${from} to rod ${to}`);
        return;
    }
    hanoi(n - 1, from, aux, to);
    console.log(`Move disk ${n} from rod ${from} to rod ${to}`);
    hanoi(n - 1, aux, to, from);
}

// 调用函数,假设有3个盘子
hanoi(3, 'A', 'C', 'B');

码小课网站分享

码小课网站中有更多关于算法和数据结构的内容分享,包括汉诺塔问题的详细解析、其他经典算法的实现以及面试技巧等,欢迎大家前往学习,不断提升自己的编程能力。

推荐面试题