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

【专题一 递归】面试题 08.06. 汉诺塔问题

1.题目解析

2.讲解算法原理

  • 如何解决汉诺塔问题?

  • 为什么可以用递归?

        大问题 ->相同类型的子问题
        子问题 -> 相同类型的子问题

  • 如何编写递归代码?
    • 重复子问题 ->函数头
      • 将x柱子上的一堆珠子,借助y柱子,转移到z柱子上→void dfs(x,y,z,n)
    • 只关心某一个子问题在做什么 ->函数体
      • dfs(x,z,y,n-1)-->    x.back()→ z        -->dfs(y,x,z, n-1)
    • 递归的出口
      • N=1

3.编写代码

class Solution {
    public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {
        dfs(A,B,C,A.size());
    }
    public void dfs(List<Integer> A, List<Integer> B, List<Integer> C,int n){
        if(n==1){
            C.add(A.remove(A.size()-1));
            return;
        }
        dfs(A,C,B,n-1);
        C.add(A.remove(A.size()-1));
        dfs(B,A,C,n-1);
    }
}


http://www.kler.cn/a/508281.html

相关文章:

  • JavaEE之CAS
  • redis实现限流
  • 菜品管理(day03)
  • 鸿蒙UI(ArkUI-方舟UI框架)-开发布局
  • 时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
  • 【Rust自学】12.4. 重构 Pt.2:错误处理
  • 20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机
  • STM32入门教程-示例程序(按键控制LED光敏传感器控制蜂鸣器)
  • Excel文件按部门切分成多个文件
  • 54,【4】BUUCTF WEB GYCTF2020Ezsqli
  • HJ11 数字颠倒(Java版)
  • 俄语画外音的特点
  • 如何在Mac上使用Brew更新Cursor应用程序
  • 记录点android升级内容
  • Dart语言的语法糖
  • [Bug]libGL.so.1: cannot open shared object file: No such file or directory
  • Golang Gin系列-1:Gin 框架总体概述
  • 北京市房屋建筑物轮廓shp数据arcgis高度字段内容下载分析
  • 电路笔记(信号):Python 滤波器设计分析工具pyfda
  • 黑马Java面试教程_P1_导学与准备篇
  • LoadBalancer负载均衡服务调用
  • 栈和队列(数据结构初阶)
  • U盘被格式化后的数据救赎与防范策略
  • IEEE RAL 中科院发表混合式巡检机器人高效轨迹规划方法
  • 聚铭网络6款产品入选CCIA《网络安全专用产品指南》
  • python 利用 ddddocr包 ocr识别图片码