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

汉诺塔递归过程推导(详细+省流)

汉诺塔
本科就没看懂,总不能难我一辈子吧…
省流版
先简化问题,假设移动 n 个盘子到一根柱子上的过程为 f(n)

首先分析最简单的 f(1)

  • A --> C

再分析简单的 f(2)

  • A --> B
  • A --> C
  • B --> C

其中B --> C就是 f(1)的过程,只不过是把B换成了A
分析一下复杂的 f(3):

  • A --> C
  • A --> B
  • C --> B

发现上面是一个f(2)过程(移动2个盘到B)
然后:

  • f(1): A --> C

此时A的最底下那块盘已移动完,不再考虑,剩下一个f(2)过程
暂时不能往下分析了,因为我们发现已经不能简单的用f(n)描述过程了,使用参数列表: F(n, *L)表示:
重写上面的f(1)过程:
F(1, A, C)

  • A --> C

重写上面的f(2)过程:
F(2, A, B, C)(通过B将2个盘从A移动到C):

  • F(1, A, B)
  • F(1, A, C)
  • F(1, B, C)

重写上面的f(3)过程:
F(3, A, B, C):

  • F(2, A, C,B)

A盘剩一个:

  • F(1, A, C)

将B盘的2个放过去:

  • F(2, B, A, C)

暂时没发现明显规律, 接着推f(4)过程:
F(4, A, B, C)
显然:

  • F(3, A, C, B)

此时A还剩最后一片:

  • F(1, A, C)

将B盘的3个放过去:

  • F(3, B, A, C)

这时, 我们发现规律: 将A的n-1个盘放到B, 再放最后一片到C, 接着把B当成A递归执行
总结成一般规律就是:
F(n, A, B, C):

  • F(n-1, A, C, B)
  • F(1, A, C)
  • F(n-1, B, A, C)

递归仍需要出口, 定义:
F(1, A, B, C)

  • F(1, A, C)

验证F(2, A, B, C)过程:

  • F(2-1, A, C, B)
    • F(1, A, B)
  • F(1, A, C)
  • F(2-1, B, A, C)
    • F(1, B, C)

与上面的分析过程一致. 至此, 递归函数已经推导出来了


文章转载自:

http://3iSKuSwp.mkydt.cn
http://fmAkGpIT.mkydt.cn
http://cLlFHvRf.mkydt.cn
http://esyXxneN.mkydt.cn
http://z70GvU2t.mkydt.cn
http://9ei3b6Az.mkydt.cn
http://vDNILZCJ.mkydt.cn
http://v6PfKLA2.mkydt.cn
http://98eG2FZj.mkydt.cn
http://UVXSxAvk.mkydt.cn
http://juSuu7bp.mkydt.cn
http://36CTWMe8.mkydt.cn
http://48xJZXsX.mkydt.cn
http://W6QEmLsW.mkydt.cn
http://HP0J0yyg.mkydt.cn
http://boL79dKt.mkydt.cn
http://5f9rJSjh.mkydt.cn
http://TWZPqxQn.mkydt.cn
http://MXt4XTCI.mkydt.cn
http://fAwccNUI.mkydt.cn
http://CftYUAf9.mkydt.cn
http://Jr345O38.mkydt.cn
http://CZOHej2e.mkydt.cn
http://Ux2rQsdy.mkydt.cn
http://hPAiv3Vk.mkydt.cn
http://bZr2HBoT.mkydt.cn
http://cynxRkeb.mkydt.cn
http://0kR5wbMg.mkydt.cn
http://PWqREId0.mkydt.cn
http://rm3o2OPB.mkydt.cn
http://www.dtcms.com/a/366344.html

相关文章:

  • MySQL高可用之组复制(MGR)
  • 单串口服务器-工业级串口联网解决方案
  • 数据库中事务、指令、写法解读
  • 【Cesium】介绍及基础使用
  • 新手向:使用 DeepSeek 帮助自己的工作
  • React Hooks深度解析:useState、useEffect及自定义Hook最佳实践
  • Shadcn UI – 开发者首选的高性能、高定制化 React 组件库
  • 【Day 20】148.排序链表
  • Flash Attention vs Paged Attention:大语言模型注意力计算的内存管理革命
  • 设计模式:中介者模式(Mediator Pattern)
  • 从Java全栈到Vue3:一个程序员的面试实战记录
  • 虚拟环境克隆
  • leetcode算法刷题的第二十六天
  • STM32传感器模块编程实践(十五)DIY语音对话控制+满溢检测智能垃圾桶模型
  • 5.7 点云公开数据集——3D形状分类/部件分割
  • 食物分类案例优化 调整学习率和迁移学习
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • 阿里云-基于通义灵码实现高效 AI 编码 | 1 | 在 Visual Studio Code 中安装和使用灵码
  • 高并发系统设计方案(直播场景)
  • VisionPro工业相机 硬触发操作前以及Vs实现
  • ClickHouse 分片、 Distributed 表、副本机制
  • STM32启动模式配置
  • 嵌入式铁头山羊stm32-SAR型ADC模块介绍、采样时间、转换时间-Day24
  • uniapp中使用echarts并且支持pc端的拖动、拖拽和其他交互事件
  • uniapp的上拉加载H5和小程序
  • 记录相机触发相关
  • 3分钟快速了解ToDesk远程控制企业版的技术奥秘!
  • 轻量级的磁盘碎片整理程序-开箱急用快速清理磁盘垃圾和碎片-供大家学习研究参考
  • JUC的安全并发包机制
  • 简单聊聊3D高斯与传统深度学习在使用CUDA时的不同