当前位置:首页 > JavaScript

js实现汉诺塔移动过程

2026-03-02 03:10:59JavaScript

汉诺塔问题简介

汉诺塔是一个经典的递归问题,涉及将一组盘子从一个柱子移动到另一个柱子,遵循规则:每次只能移动一个盘子,且大盘子不能放在小盘子上面。

实现思路

使用递归方法可以简洁地描述汉诺塔的移动过程。递归的核心思想是将问题分解为更小的子问题,直到达到基本情况(只有一个盘子时直接移动)。

js实现汉诺塔移动过程

代码实现

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

// 示例:移动3个盘子,从柱子A到柱子C,借助柱子B
hanoi(3, 'A', 'C', 'B');

代码解析

  • 参数说明

    • n:盘子的数量。
    • source:起始柱子。
    • target:目标柱子。
    • auxiliary:辅助柱子。
  • 递归逻辑: 当盘子数量为1时,直接将盘子从起始柱子移动到目标柱子。 盘子数量大于1时,先将上方n-1个盘子从起始柱子移动到辅助柱子,再将第n个盘子移动到目标柱子,最后将n-1个盘子从辅助柱子移动到目标柱子。

    js实现汉诺塔移动过程

输出示例

调用hanoi(3, 'A', 'C', 'B')的输出如下:

Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C

可视化改进

若需动态展示移动过程,可结合HTML和CSS实现动画效果,或使用setTimeout分步打印移动步骤。

function delayedHanoi(n, source, target, auxiliary, delay) {
    if (n === 1) {
        setTimeout(() => {
            console.log(`Move disk 1 from ${source} to ${target}`);
        }, delay);
        return delay + 1000;
    }
    let newDelay = delayedHanoi(n - 1, source, auxiliary, target, delay);
    setTimeout(() => {
        console.log(`Move disk ${n} from ${source} to ${target}`);
    }, newDelay);
    newDelay += 1000;
    return delayedHanoi(n - 1, auxiliary, target, source, newDelay);
}

// 示例:每步间隔1秒
delayedHanoi(3, 'A', 'C', 'B', 0);

标签: 过程汉诺
分享给朋友:

相关文章

php评论实现过程

php评论实现过程

实现PHP评论功能的基本过程 数据库设计 创建数据库表存储评论信息,通常包含字段:评论ID、用户ID、内容、发布时间、关联文章ID等。示例SQL: CREATE TABLE comments (…

vue实现过程

vue实现过程

Vue 实现过程 Vue 的实现过程主要涉及核心功能模块的协同工作,包括响应式系统、虚拟 DOM、模板编译等。以下是关键实现环节: 响应式系统 Vue 2.x 使用 Object.definePro…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,适用于 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装 PHP 环境 确保服务器或本地开发环境已安装 PHP。可以通…

php 过程实现

php 过程实现

PHP 过程式编程是一种以线性流程为基础的编程范式,适合小型项目或快速开发。以下是关键实现方法和示例: 基本语法结构 PHP 过程式代码通常由函数、条件语句和循环组成。函数用于封装可复用的逻辑块,避…

php评论实现过程

php评论实现过程

实现PHP评论功能的基本步骤 数据库设计 创建评论表(如comments),包含字段:id(主键)、user_id(用户ID)、content(评论内容)、created_at(创建时间)、paren…

php秒杀实现过程

php秒杀实现过程

秒杀系统核心实现要点 高并发秒杀系统的关键在于解决超卖、性能瓶颈和数据一致性。PHP实现需结合缓存、队列和数据库优化。 库存预减与原子操作 使用Redis的DECR原子命令预减库存,避免超卖: $…