第二章 :查找与排序-------递归经典问题——汉诺塔问题

最全的2021蓝桥杯算法课《算法很美》的学习笔记总目录+真题详解 本系列是对最全的2021蓝桥杯算法课《算法很美》的笔记总结和归纳 学习视频:算法很美 第一章 1.1课程介绍 阅读详情

递归经典问题——汉诺塔问题:

1-N从A移动到B,C作为辅助:

    等价于:

         1、1~N-1从A移动到C,A作为源,B作为辅助;

         2、把N从A移动到B;

         3、1~N-1从C移动到B,A作为辅助。

#include<iostream>
using namespace std;
/*
**将N个盘子从source移动到target的路径打印 
**
**N: 初始的N个从小到大的盘子,N为最大编号 
**from: 原始柱子 
**to: 目标柱子 
** help: 辅助柱子 
*/

void printHanoiTower(int N,string from,string to,string help){
	if(N==1){
		cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl;
		return;
	} 
	
	printHanoiTower(N-1,from,help,to);      //先把前N-1个盘子挪到辅助空间去 
	cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl;    //N可以顺利地到达target 
	printHanoiTower(N-1,help,to,from);    //让N-1从辅助空间挪到目标空间 
}
int main(){
	printHanoiTower(3,"A","B","C");
	
	return 0;
}

注:将前n-1个盘子看做整体。

 

 结果:

Multisim实战:从8选1到32选1数据选择器的完整搭建指南(附常见问题解决) 本文提供了一份详尽的Multisim实战指南,手把手教你从基础的8选1数据选择器开始,逐步级联搭建16选1乃至32选1数据选择器。文章深入剖析了级联的核心逻辑、片选方案以及使用译码器的专业方法,并附带了电源连接、输出冲突、信号毛刺等常见问题的诊断与解决技巧,帮助电子工程学生和爱好者扎实掌握数字电路的系统设计与仿真调试。 阅读详情

相关推荐

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 357

《经典递归问题:汉罗塔》

本文采用c、java语言代码来实现汉罗塔问题,最主要的是理解递归的思想。

TheMyth142857的博客 2221

proteus仿真51单片机操作指南:串口通信仿真配置详解

深入讲解如何在proteus仿真51单片机中实现串口通信,涵盖虚拟串口设置、电路连接与调试技巧,帮助开发者高效完成通信仿真验证。

weixin_36197669的博客 573

蓝桥杯课程 递归

/*递归*/ #include&lt;iostream&gt; using namespace std; int fac(int n)//求n的阶乘 { if(n==1) { return 1; } return n*fac(n-1); } void ij(int i,int j)//从i到j进行打印 { if(i&gt;j) { return; } cout&...

weixin_43140561的博客 1461

Codex本地部署指南:从环境配置到API集成实战

Codex作为OpenAI推出的代码生成模型,能够根据自然语言描述自动生成代码片段,大幅提升开发效率。这次我们重点分析Codex的本地部署方案、硬件门槛、接口调用方式和实际使用效果,帮助开发者判断是否值得投入时间部署。 从技术架构看,Codex基于GPT-3模型微调,专门针对代码生成任务优化。最新版本支持多种编程语言,包括Python、JavaScript、Java、C++等主流语言。对于国内开发者来说,最关心的是能否在本地环境稳定运行,以及是否需要特殊网络配置。 1. 核心能力速览 能力项 技术说明 模型

weixin_33309048的博客 525

发那科 Fanuc PLC 报文通讯,报文解析。附源程序

发那科 Fanuc PLC 报文通讯,最详细的发那科 PLC报文解析,不再局限在官方提供的库,也不用再局限在windows平台。

ITOfDragon的博客 1748

百僧吃百馍

100个和尚相当于100个头,300份馒头相当于300只脚,小和尚1人吃1份、大和尚1人吃9份就相当于小和尚1只脚、大和尚9只脚。3个小和尚吃1个馒头,如果我们把1个小和尚吃的馒头看成1份,那么1个馒头就是3份,也就是一个大和尚要吃3×3=9份,100个馒头有100×3=300份。这道题中1个大和尚吃3个馒头,3个小和尚吃1个馒头,如果我们把1个大和尚和3个小和尚看成1个小组,那个这个小组一共需要吃3+1=4个馒头。这是因为我们把一些大和尚当作了小和尚,1个大和尚就少算了9-1=8份馒头;

Ch123456ljjj的博客 1262

Centos 7 Linux 安装 JDK 8:下载、安装、配置环境变量、验证

本文详细介绍了在 CentOS 7 系统上手动安装 JDK 8 的完整流程,包括环境准备、JDK 安装包下载与上传、解压安装、配置全局环境变量,以及最终的验证步骤。适用于使用 VMware 虚拟机、云服务器或物理机的 CentOS 7 用户,操作清晰、步骤完整,帮助开发者快速搭建 Java 开发环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2584

汉诺塔递归问题

有一说一,真的很难,我看了视频讲解才懂。第一次发帖,加上本来文笔就拉跨,希望轻点喷。

xcnwldgxxlhtff的博客 1178

海思图像质量之HiPQTool调试

文章目录一. HiPQTool 界面二. 图像调试三. 将调试参数写入程序中 一. HiPQTool 界面 二. 图像调试 三. 将调试参数写入程序中

lzg2011的博客 2382

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1997

算法篇01---汉诺塔问题、查找、排序问题

一、递归---汉诺塔问题 二、查找 查找:在一些数据元素中,通过一定方法找出与给定关键字相同的数据元素的过程 列表查找(线性表查找):从列表中查找指定元素 >>> 输入:列表、待查找元素 >>>输出:元素下标(未找到元素时一般返回None或-1) 内置列表查找函数:index( ),这是顺序查找,因为二分查找必须是有序列表 (1) 顺序查找(线性查找) 从列表第一个元素开始,顺序进行搜索,知道找到元素或搜索到列表最后一个元素为止。 时间复杂度:O(n)

S1406793的博客 1046

self‑improving‑agent 安装与配置指南(OpenClaw)

长期记忆错误反思用户偏好学习持续进化AI → 反思 → 学习 → 改进。

tiantiantbtb的博客 1342

蓝桥杯《算法很美》第二章 查找与排序C/C++【一】

查找与排序先从讲递归开始。课程列举了很多递归典例,按照理解的难度从简到繁,部分过于简单的就不再赘述了,只写一些有意义的代码。 递归的要点 找变化,找重复,找出口,子问题要与原问题有同样的结构。 【一】 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第...

Show me CODE 404

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法设计与分析课程学习-第二章:递归与分治策略

由于笔者的这门课突然宣布从考查课成为了考试课,并且老师的讲课水平一般,所以我打算通过写博客的方式自学这本书.虽然笔者有一定算法设计基础,但是这门课所使用的教材的编写方式与我之前学习的常规方式有一定区别,并且晦涩难懂(在我主观上).我打算以书中的例题为基础,以我自己能理解的方式对书中的算法进行阐述.由于精力有限,我只能抽时间去更新STL源码分析的内容. 闲话少说,今天开始这本书的第二章:递归与分治策略. 递归的基本概念 直接或间接调用自己的算法称为递归算法...

qq_51845557的博客 818

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

第二章&第三章 查找和排序(上)

1、经典递归问题: 汉诺塔问题:(递归+分治) 分治法要包括递归法:分治是指将原问题划分成多个小规模的子问题,递归的解决这些字问题然后合并其结果,得到原问题的解 代码: class Main{ public static void main(String[] args) { int num = 2; int x = hannuo(num); ...

h_666666的博客 332

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第二章 递归与分治策略知识总结

计算机算法设计与分析--递归与分治策略知识总结

qq_56445588的博客 873

2020蓝桥杯备战-第二章-查找和排序(上)-递归基础题目

递归基础训练题目: (一)重复中找变化,变化中找重复-切蛋糕 (1)求阶乘 (2)打印i-j (3)数组求和 (4)翻转字符串 (二)划不开-递推公式,等价转换 (5)斐波那契数列 (6)最大公约数-辗转相除法 (7)插入排序转递归 (8)汉诺塔 //########################递归问题################# //#####(一)重复中找变化,变化中找重复#####...

weixin_43562415的博客 446

算法导论 第二章 递归与分治

阶乘函数 斐波那契数列 #include <iostream> #include <cstring> #include <algorithm> using namespace std; // 阶乘函数 int fact(int n) { if(!n) return 1; return n * fact(n...

YZ930035683的博客 156

递归的递归之书:引言到第四章

引言 原文:Introduction 译者:飞龙 协议:CC BY-NC-SA 4.0 递归编程技术可以产生优雅的代码解决方案。然而,更常见的情况是它会使程序员感到困惑。这并不意味着程序员可以(或应该)忽视递归。尽管它以具有挑战性而闻名,但递归是一个重要的计算机科学主题,可以为编程本身提供深刻的见解。至少,了解递归可以帮助你在编程工作面试中脱颖而出。 如果你是一个对计算机科学感兴趣的学生,递归是一个必须克服的障碍,以理解许多流行的算法。如果你是一个编程训练营的毕业生或自学的程序员,成功地绕过了更理论性

龙哥盟 1439

个人随意总结知识——数据结构教程(第5版)【李春葆】

个人随意总结知识——数据结构教程(第5版)【李春葆】 前缀表达式 中缀表达式 后缀表达式 Brute-Force算法 KMP算法 递归 汉诺塔 二叉树 树 遍历 深度优先遍历 DFS 广度优先遍历 BFS 最小生成树 Prim算法 Kruskal算法 Dijkstra算法 狄克斯特拉算法 Floyd算法 弗洛伊德算法 从一个顶点到其余个顶点的最短路径 每对顶点之间的最短路径 拓扑排序 AOE网 查找 内排序 外排序

GJunan的博客 4038

分治算法原理——将大象切成小块的智慧

O(n log n)时间复杂度是算法效率的重要指标,表示每个元素需参与log n次分组或合并操作。典型应用包括归并排序、堆排序等分治算法。以排序1000本书为例,采用分治策略:先将书分成两半各自排序再合并,每本书都会经历约10(log₂1000≈10)次分组合并。归并排序代码展示了如何递归拆分数组并有序合并,其时间复杂度为n次操作乘以log n层分解。堆排序通过建堆和反复调整实现同样效率。这类算法比O(n²)快得多,是排序算法的效率天花板,适用于需要高效处理大规模数据的场景。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 458

<我的第一本算法书>手记(持续更新)

圆圈叫作“顶点”(也叫“结点”),连接顶点的线叫作“边”, 由顶点和连接每对顶点的边所构成的图形就是图图可以表现社会中的各种关系,使用起来非常方便。

q63176347的博客 567

【算法】计算机算法—一数据结构

一、绪论 1. 汉诺塔问题 (递归) 塔 A B  C , 为把最大的圆盘置于塔B的底部,需将其余的n-1移动到塔C, 将最大的圆盘移动到塔B, 通过函数TowersOfHanoi(n, A, B, C),可以看出n个圆盘的问题可以根据两次n-1个圆盘问题的解来表示。 void TowerOfHanoi(int n, tower A, tower B, tower C) { if (n)

zhonglinzhang 3839

数据结构学习必备:从指针递归到复杂度分析的四步预备知识框架

数据结构是计算机科学的核心基础,它研究数据的组织、存储和操作方式,直接影响程序的效率和性能。其核心原理在于通过特定的逻辑结构(如线性表、树、图)和物理存储方式,实现对数据的高效管理。掌握数据结构的技术价值在于能够为具体问题选择最优的解决方案,提升算法执行速度并优化资源利用。在应用场景上,从数据库索引(B+树)、网络路由(图算法)到缓存系统(哈希表),数据结构无处不在。本文聚焦于构建一个系统性的学习框架,强调在学习链表、树等具体结构前,必须夯实编程语言基础(如指针与内存管理)、数学逻辑(时间复杂度与递归分析)

weixin_33906657的博客 436

算法与数据结构

本文摘要:文章系统总结了数据结构与算法核心知识点,涵盖时间复杂度分析(O(2^n)、O(logn)等)、存储结构(数组/链表空间对比)、经典算法(二分查找、排序算法)、树结构(BST/AVL/红黑树/B树)、图算法(DFS/BFS/最短路径)、高级数据结构(堆/并查集/哈夫曼树)及算法设计思想(贪心/分治)。重点包括:链表三指针反转、堆的构建与调整、AVL树旋转、拓扑排序、最小生成树算法(Prim/Kruskal)的实现与复杂度分析,以及散列表冲突处理策略。通过算法特性对比(如红黑树与AVL树)和实际应用场

2301_80226956的博客 1120
上一篇: 第二章 :查找与排序-------递归形式进行插入排序
下一篇: 第二章 :查找与排序-------二分查找的递归解法
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值