递归类C++

news2024/10/2 6:25:43

1、汉诺塔

面试题 08.06. 汉诺塔问题 - 力扣(LeetCode)

Why?为什么这个汉诺塔问题可以用递归来解决?

如何来解决汉诺塔问题?

如果N == 1时,A[0] B C,直接将A上的盘子转移到C上面。

如果N == 2时,A[1,0] B C,先将上面所有的盘子放到B,然后将A上最大的那个放到C,再把B上的盘子转移到C。

如果N == 3,先将上面两个盘子,借助C,放到B上,然后把最下面的盘子放到C上,再将B上的两个盘子,借助A,放到C上。那么此时,转移上面两个盘子的操作,是不是和N == 2时的操作一模一样了。相同的子问题就出来了。并且由于A最下面是最大的盘子,那么过程中借助A柱子时,就不用担心大的放到小的上面去了。

如果N == n时,…………

 分析可知:

解决本题时,可以分割出子问题,并且子问题的解决方法和主问题相同。

在解决子问题时,分割出子子问题,解决子子问题的时候,方法又和子问题一样。

本题体现:解决N = 4时,出现了N = 3的情况;解决N = 3时,出现了N = 2的情况…………

此时就可以用递归解决。

How?如何编写递归的代码?

1、重复子问题--->函数头

将X柱子上的一堆盘子,借助Y柱子,转移到Z柱子上。

void dfs(X,Y,Z,int n),n代表要转移多少个盘子。

2、只关心某一个子问题在做什么--->函数体

dfs(X,Z,Y,N-1)   //将X上面N-1个盘子,借助Z放到Y上。

X.back() --> Z  //将X的最后一个盘子,放到Z上。

dfs(Y,X,Z,N-1)  //再将Y上所有的N-1个盘子,借助X,放到Z上。

3、递归的出口(哪一个子问题不能再细分了)

当N == 1时,不用借助柱子就能完成,所以递归的出口就是N == 1

if( N == 1) X.back --> Z   //X.back()移到Z上。

class Solution {
public:
    void dfs(vector<int&

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端CSS】CSS的3种基本选择器和5种高级选择器使用方式

目录 前言 基本选择器 1.1 标签选择器 1.2 ID选择器 1.3 类选择器 高级选择器 2.1 并集选择器 2.2 交集选择器 2.3 后代选择器 2.4 子元素选择器 2.5 属性选择器 前言 1W&#xff1a;什么是CSS选择器&#xff1f; CSS选择器由HTML元素的id、class属性或元素名本身以及…

1688平台官方开发平台API接口接入|发布商品|订单查询|跨境API接口

《财经十一人》获悉&#xff0c;阿里巴巴&#xff08;BABA.N&#xff09;旗下中国B2B平台1688正布局跨境业务。 举措主要有二&#xff1a;一是提供跨境版API接口&#xff0c;可将1688的货盘导入各类有流量的平台&#xff0c;比如各国代采网站、服务商SaaS&#xff08;软件服务…

pytorch的理解

工具的查看与使用帮助 1. dir import torch torch.cuda.is_available()dir(torch) dir(torch.cuda) #可以看到有"is_available" 2. help help(torch.cuda.is_available)

安装torch以及版本对应问题

首先查看cuda版本&#xff1a;winR 输入&#xff1a;nvidia -smi 我的cuda版本12.2&#xff0c;安装的torch版本要小于12.2 我的pip/conda源都改成清华源了&#xff0c;torch2.0以上的版本截止到2024年3月10日也没有。 pytorch官网&#xff1a;https://pytorch.org/ 寻找匹配…

jvm题库详解

1、JVM内存模型 注意&#xff1a;这个是基于jdk1.8之前的虚拟机&#xff0c;在jdk1.8后 已经没有方法区&#xff0c;一并合并到堆中的元空间了 JVM内存区域总共分为两种类型 线程私有区域&#xff1a;程序计数器、本地方法栈和虚拟机栈 线程共享区域&#xff1a;堆&#xff08…

2.16CACHE,页式存储器,虚拟~,CPU

CACHE SRAM比DRAM集成度低 下面的情况就是说同时找&#xff0c;所以就不用再从头找 映射方式 替换算法 就相当于插入排序调牌堆&#xff0c;如果被选中了&#xff0c;就放到牌堆第一个位置&#xff0c;那么其后面的所有排序相当于都1&#xff0c;不用考虑会超过后面的牌序&…

【Python】进阶学习:OpenCV--一文详解cv2.namedWindow()

【Python】进阶学习&#xff1a;OpenCV–一文详解cv2.namedWindow() &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

SpringMVC08、Json

8、Json 8.1、什么是JSON&#xff1f; JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和…

基于PCtoLCD实现OLED汉字取模方法

0 工具准备 PCtoLCD2002 NodeMCU&#xff08;ESP8266&#xff09;&#xff08;验证OLED字模效果&#xff09; 0.96寸OLED显示屏 1 基于PCtoLCD实现OLED汉字取模方法 1.1 基础知识介绍 0.96存OLED显示屏包含128x64个像素点&#xff0c;x轴方向为128个像素点&#xff0c;y轴方向…

Python 浅复制与深复制(Shallow Copy Deep Copy)

在Python中&#xff0c;赋值语句的意义是在对象与变量之间建立引用关系&#xff0c;相当于给对象起了名字。对于复合类型对象&#xff0c;由于其可以保存其他类型对象的引用&#xff0c;而在复制时即引出了“仅复制引用关系”或“同时复制引用对象”两种选择&#xff0c;即浅复…

通过Annotation将用户操作记录到数据库表功能实现

一、背景 在用户对我们所开发的系统访问的时候&#xff0c;需要我们的系统具有强大的健壮性&#xff0c;使得给与用户的体验感十足。在业务开发的过程中&#xff0c;我们通过将几个相关的操作绑定成一个事件&#xff0c;使得安全性以及数据的前后一致性得到提高。但是在溯源方面…

数据结构(二)——线性表(顺序表)

二、线性表 2.1线性表的定义和基本操作 2.1.1 线性表的基本概念 线性表&#xff1a;是具有相同数据类型的 n 个数据元素的有限序列。(Eg:所有的整数按递增次序排列&#xff0c;不是顺序表&#xff0c;因为所有的整数是无限的)其中n为表长&#xff0c;当n0时线性表是一个空表…

Java反射、枚举类和lambda表达式

前言&#xff1a; 本章我们就来了解Java中的反射和枚举类。枚举类和反射其实有些关系&#xff0c;接下来我们就来学习他们的使用。 反射&#xff1a; 反射的作用&#xff1a; 反射&#xff1a;反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问。 Java中有…

input中文输入法导致的高频事件

这是基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>中文输入法的高频事件</title&…

F1 使用问题总结

F1 使用问题总结 问题一&#xff1a;话题发布 问题二&#xff1a;网络问题 文章目录 F1 使用问题总结一&#xff1a;话题发布一&#xff1a;rostopic命令将ROS话题的输出内容记录下来一&#xff1a;ROS分布式远程控制网络配置分布式介绍应用场景主从机配置环境搭建计算机虚拟机…

django学习记录07——订单案例(复选框+ajax请求)

1.订单的数据表 1.1 数据表结构 1.2 数据表的创建 models.py class Order(models.Model):"""订单号"""oid models.CharField(max_length64, verbose_name"订单号")title models.CharField(max_length64, verbose_name"名称&…

【前端】vscode快捷键和实用Api整理

vscode的快捷键 创建a.html 生成模板 !回车 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

Galxe:被低估的加密市场掘金地+Web3门户

在BTC ETF获得 SEC 的批准之后&#xff0c;机构资金大量买入推动BTC上涨&#xff0c;并带动整个加密市场回暖进入牛市。那么&#xff0c;对于习惯了熊市保守心态的投资者来说&#xff0c;接下来如何转换策略适应牛市&#xff1f;对即将进场的Web2用户来说&#xff0c;如何玩赚W…

《汇编语言》第3版 (王爽)实验11解析

第11章 实验11解析 检测点11.3 &#xff08;1&#xff09;.补全下面的程序&#xff0c;统计F000&#xff1a;0处32个字节中&#xff0c;大小在[32&#xff0c;128]的数据个数。 mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s:mov al,[bx]cmp al,32jb s0 ;由于包含32&#…

深入理解Java泛型:灵活、安全、可重用的编程利器

Java泛型是一项强大的编程特性&#xff0c;为程序员提供了一种灵活、类型安全、可重用的编码方式。通过泛型&#xff0c;我们能够编写更加通用、适应多种数据类型的代码&#xff0c;从而提高了代码的灵活性和可维护性。在这篇博客中&#xff0c;我们将深入探讨Java泛型的各个方…