当前位置:首页 > 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);

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

相关文章

vue登录的实现过程

vue登录的实现过程

创建登录页面组件 在Vue项目中创建一个登录页面组件,通常命名为Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template> <div c…

vue实现过程

vue实现过程

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

php评论实现过程

php评论实现过程

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

php 秒杀实现过程

php 秒杀实现过程

秒杀系统的基本原理 秒杀系统的核心在于应对高并发请求,确保在极短时间内处理大量用户对有限商品的抢购。关键在于系统架构设计、缓存优化、限流和库存管理。 数据库设计 商品表和秒杀活动表需要特别设计。商品…

php秒杀实现过程

php秒杀实现过程

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

vue实现spa的过程

vue实现spa的过程

Vue 实现 SPA 的过程 1. 初始化项目 使用 Vue CLI 或 Vite 创建项目框架,确保项目结构支持 SPA 开发。 安装依赖: npm create vue@latest my-…