当前位置: 首页 > news >正文

汉诺塔算法

汉诺塔问题描述:有A, B, C三个圆柱,其中A上从上至下放置了从小到大n个圆盘,一次只能移动一个圆盘,且大的圆盘不能放在小圆盘之上,要求打印出从A将圆盘移到C的方案。

当n = 1时, A->C
当n = 2时, A->B, A->C, B->C
当n = 3时, [A->C, A->B, C->B,] A->C,[B->A, B->C, A->C]
当n = 4时, A->B, A->C, B->C, A->B, C->A, C->B, A->B,

        A->C, 
        B->C, B->A, C->A, B->C, A->B, A->C, B->C

当n = 5时, A->C, A->B, C->B, A->C, B->A, B->C, A->C,

        A->B, 
        C->B, C->A, B->A, C->B, A->C, A->B, C->B
        
        A->C,
        
        B->A, B->C, A->C, B->A, C->B, C->A, B->A,
        B->C, 
        A->C, A->B, C->B, A->C, B->A, B->C, A->C

当n > 2时,第n项,[A->B],A->C,[B->C]

       第n-1项,A->B  [A->C],A->B,[C->B]    B->C [B->A],B->C,[A->C]
       第n-1-1项,
        第n-1项,A->C(此处的C应该是B),A->C,和第n-1-1项,A->B(此处的B应是C),B->C
        ……
        如此重复,可以用递归求得结果
        

由此,不难看出,计算n个圆盘,所需要的次数为f(n) = 2*f(n-1)+1

代码:

const move=(a,c)=>{
    console.info(`${a}->${c}`)
}

const hanoi = (n,a,b,c)=>{
    if(n === 1){
        move(a,c)
    }else{
        //[A->B]
        hanoi(n-1,a,c,b);
        move(a,c);
        //[B->C]
        hanoi(n-1,b,a,c);
    }
}

参考:从fibonacci和汉诺塔看分治法

相关文章:

  • 使用OTL进行数据库编程
  • Qt中的qrc文件
  • python sys 模块
  • redis可视化工具的安装和调试
  • 两种表复制语句
  • 成员运算符
  • 通过Nagios监控Tomcat服务
  • Wpf 之Canvas介绍
  • 杯具的vmware和virtual box虚拟机转换
  • 【转】keyCode对照表及JS监听组合按键
  • 第41周日思考如何更好的工作
  • WordPress 介绍
  • Python-装饰器详解
  • hexo 常用命令
  • Android各层推荐开发书籍及参考资料
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android单元测试 - 几个重要问题
  • github从入门到放弃(1)
  • Java方法详解
  • jquery cookie
  • MobX
  • nodejs实现webservice问题总结
  • Python进阶细节
  • React-生命周期杂记
  • Terraform入门 - 1. 安装Terraform
  • ubuntu 下nginx安装 并支持https协议
  • 百度小程序遇到的问题
  • 订阅Forge Viewer所有的事件
  • 给第三方使用接口的 URL 签名实现
  • 记一次用 NodeJs 实现模拟登录的思路
  • 坑!为什么View.startAnimation不起作用?
  • 盘点那些不知名却常用的 Git 操作
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #传输# #传输数据判断#
  • $L^p$ 调和函数恒为零
  • (03)光刻——半导体电路的绘制
  • (arch)linux 转换文件编码格式
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (分类)KNN算法- 参数调优
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (黑马C++)L06 重载与继承
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)甲方乙方——赵民谈找工作
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .form文件_一篇文章学会文件上传
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .Net 路由处理厉害了
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET的微型Web框架 Nancy