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

面试题:汉诺塔问题 · 递归

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 汉诺塔问题
    • 问题描述
    • 解题思路
    • 代码详解

在这里插入图片描述

汉诺塔问题

问题描述

在这里插入图片描述

解题思路

这道题的名字还是很响的,基本上都能看出来使用递归解题,但是具体怎么实现还是需要细细想一想。

我们一步一步来,请看:

在这里插入图片描述

代码详解

class Solution {
public:
    void hanota(vector<int>& A, vector<int>& B, vector<int>& C) 
    {
        // 将 A 上的盘子借助 B 移动到 C 上
        _hanota(A, B, C, A.size());
    }

    void _hanota(vector<int>& A, vector<int>& B, vector<int>& C, int n)
    {
        // 递归出口
        if(n == 1)
        {
            C.push_back(A.back());
            A.pop_back();
            return;
        }

        // 首先将 A 中的 n - 1 个盘子通过 A C 移动到 B 上
        _hanota(A, C, B, n - 1);

        // 然后将 A 中最后一个大盘直接移动到 C 上
        C.push_back(A.back());
        A.pop_back();

        // 最后通过 A B 将 B 上的圆盘移动到C上
        _hanota(B, A, C, n - 1);
    }
};
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

在这里插入图片描述


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

相关文章:

  • 数字后端教程之Innovus report_property和get_property使用方法及应用案例
  • UniApp 应用、页面与组件的生命周期详解
  • 一文简单了解Android中的input流程
  • 在Java中使用ModelMapper简化Shapefile属性转JavaBean实战
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • ️️一篇快速上手 AJAX 异步前后端交互
  • 知识工作者,需要填报工时么? | IDCF
  • 基于springboot的电影院管理系统的设计与实现 (含论文和源码视频导入教程)
  • HarmonyOS 传感器开发指南
  • 专业的事交给专业的公司来做,文件销毁 数据销毁 硬盘销毁
  • 添加通信作者标记、共同作者标记
  • 剑指 Offer(第2版)面试题 10:斐波那契数列
  • 深入理解 Cookie 和 Session 的工作流程
  • 【工业智能】Solutions
  • Android : 异常记录
  • 分布式机器学习、联邦学习、多智能体的区别和联系——一文进行详细解释
  • Mysql中正则表达式Regexp常见用法
  • 直线(蓝桥杯)
  • docker-compose Foxmic dt版
  • P9242 [蓝桥杯 2023 省 B] 接龙数列(dp+最长接龙序列+分类)
  • 什么是关系型数据库?
  • Windows快速找到软件的exe文件路径
  • Golang并发模型:Goroutine 与 Channel 初探
  • 冒泡排序以及改进方案
  • BGP综合实验(IP)
  • 【密码学引论】Hash密码