递归详解之青蛙跳台阶和汉诺塔问题

news2025/7/10 13:14:11

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑     
————————————————
版权声明:本文为CSDN博主「Solitary-walk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/X_do_myself/article/details/134220644

一:递归的简单了解

1.递归定义:

     递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。

换言之就是大事化小,小事化了的一个过程

2.递归的必要条件:

  1)必须有递归结束的条件

   2)在递归的过程中不断接近递归结束的条件

二:青蛙跳台阶

1.问题:从前有一只小青蛙,他想通过自己的实力来到台阶的最顶端,看看高处的放进如何,但是他遇到一个问题,不知道自己要如何走到顶峰,那么聪明的你,没错,就是此时正在玩博客的你,是否可以设计出青蛙跳台阶的这个过程?

接下来我们一起分析:

首先以3个台阶为例,进行分析:

 其实大的角度无非就两个问题: 一次跳两个  ? 一次跳一个  进行组合  

  1) 一次跳一个 

2) 先跳一个台阶 -> 再跳2个台阶

3) 先跳2个台阶  -> 再跳1给台阶

    其实回归问题本质就是:

对于  n 个台阶,当第一次选择跳一个台阶的时候,剩余n-1 台阶要如何走

当第一次选择跳2个台阶的时候,剩余 n-2台阶如何走

ok ,想必有了以上的开胃小菜,接下来的代码实现就会很好理解

 首先我们建立一个函数Jump(int n)     : 表示跳n 个台阶有多少种方法

Jump(n) = Jump(n-1) + Jump(n-2)  借助递归算法很简便

int  Jump(int n)
{
  //n = 1,只有一种跳法
// n = 2 ,2种跳法
	if (n == 1)
	{
		return 1;
	}
	if (n == 2)
	{
		return 2;
	}
	if (n > 2)
	{
		return Jump(n - 1) + Jump(n - 2);
	}

}

 优化之后的代码


int  Jump(int n)
{
	/*if (n == 1)
	{
		return 1;
	}
	if (n == 2)
	{
		return 2;
	}*/
	if (n <= 2)
	{
		return n;
	}
	if (n > 2)
	{
		return Jump(n - 1) + Jump(n - 2);
	}

}

三:汉诺塔问题

 问题的描述是:有三根柱子,A、B、C,A柱上放有n个大小不等的圆盘,大的在下,小的在上。要求把A柱上的圆盘全部移到C柱上,并且在移动过程中要遵守以下规则:一次只能移动一个圆盘;大的圆盘不能放在小的圆盘上面。

     接下来咱话不多,直接进行分析就行:

初状态的草图:

 这里我们需要借助C柱子,把1,2号盘子移动到我的B柱子上

草图如下:

1)盘子1的移动:

2)盘子2:

3)盘子3:

4)

1)盘子1的移动: A->C

2 ) 盘子2 :A->B

3) 盘子3 :需要先把盘子2移动到B上  C->B  接着是移动盘子3 A->C

4)1移动到A,B->A

5)2移动到C ,B->c

6) 1直接移动到C ,A->C

 接下来回归问题本质:

对于n个盘子而言就是 前n-1个盘子的移动和第n个盘子的移动

在这里我设计2个函数

Hanoi(int n,char pos1,char poos2,char pos3)  用来递归实现移动

Move(char pos1,char pos2)  用来打印盘子的移动过程

void Hanoi(int n, char pos1, char pos2, char pos3)  //此函数用来递归实现盘子的移动,移动的本质就是:起始位置->中转位置->目标位置
{
	//注意: pos1;盘子的起始位置,A   pos2:中转位置,B   pos3:盘子最终的目标位置,C
	// n:盘子的个数
	//当是一个盘子的话,直接从我的起始位置移动到我的目标位置
	if (n == 1)
	{
		Move(pos1, pos3);
	
	}
	else
	{
		//当n>1其实就是一个就是 n-1个盘子和一个盘子的移动问题
		Hanoi(n - 1, pos1, pos3, pos2);//注意这里的第二个参数表示盘子的中转位置,并不表示我的目标位置
		Move(pos1, pos3);//A柱子上的最后一个盘子直接移动到我的目标位置
		Hanoi(n - 1, pos2, pos1, pos3);

	}

}

}
int main()
{
	Hanoi(2, 'A', 'B', 'C');
	printf("\n");
	Hanoi(3, 'A', 'B', 'C');
	printf("\n");



	return  0;
}

 运行结果:

以上就是我今日的share,递归这个思想是很重要的在后期的学习中我也会不断更新,各位大佬们,觉得还不错的话,互关互赞一下吧,蟹蟹

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

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

相关文章

阻止指定IP地址进行网站访问的简单方式

​  许多网站管理员&#xff0c;应该都会将恶意持续访问的IP请求视为比较头疼的一个问题。要解决这个不正常的访问请求&#xff0c;增强网站安全性&#xff0c;有些简单方式可用。在下面的文章中&#xff0c;介绍了使用.htaccess来禁止某些IP地址的简单方式。 首先&#xff0…

C#的checked关键字判断是否溢出

目录 一、定义 二、示例&#xff1a; 三、生成&#xff1a; 一、定义 使用checked关键字处理溢出。 在进行数学运算时&#xff0c;由于变量类型不同&#xff0c;数值的值域也有所不同。如果变量中的数值超出了变量的值域&#xff0c;则会出现溢出情况&#xff0c;出现溢出…

C++内联函数与引用(超详细)

文章目录 前言一、内联函数1.为什么会存在内联函数2.什么是内联函数3.内联函数注意事项 二、引用1.什么是引用2.引用的特性3.常引用4.引用使用场景5.引用与指针 总结 前言 一、内联函数 1.为什么会存在内联函数 &#x1f9d0;&#x1f9d0;首先我们介绍内联函数之前&#xf…

ESP32入门六(读取引脚的模拟信号[3]:信号出现误差的原因[硬件篇])

在之前的文章中&#xff0c;我们介绍了ESP32在读取模拟信号时出现的误差的软件方面原因&#xff0c;在这一篇中&#xff0c;将会介绍并测试由于硬件或其它方面导致数据出现误差的原因。 一、厂商原因 首先&#xff0c;我们需要知道&#xff0c;在每块EPS32中&#xff0c;在出…

unity随笔- 2D动画制作animation

1.前提&#xff1a;将连续的动作图片制为图集。 2.在Hierarchy中选中含图集的sprites对象。 3.打开animator组件&#xff0c;点击create创建动画组件 4.添加property选择sprite 5.选择图集需要的部分加入animation。&#xff08;animation使用见animator&#xff09;

互联网加竞赛 基于Django与深度学习的股票预测系统

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于Django与深度学习的股票预测系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff…

【计算机毕业设计】SSM汽车维修预约平台

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色&#xff1a; 管理员登录,新增管理员信息,查看管理员信息,查询管理员信息,查看用户信息列表,查询用户信息,新增新闻公告,查看新闻公告,查询新闻公告,新增配件类…

【unity学习笔记】配置模型,实现眨眼和口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型&#xff08;.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。&#xff08;VRM-0.116.0_0f6c&#xff09; 3.将univrm导入到工程中&#xff08;assets&#xff09;。 三…

Unity坦克大战开发全流程——开始场景——开始界面

开始场景——开始界面 step1&#xff1a;设置UI 反正按照这张图拼就行了 step2&#xff1a;写脚本 前面的拼UI都是些比较机械化的工作&#xff0c;直到这里写代码的时候才真正开始有点意思了&#xff0c;从这里开始&#xff0c;我们就要利用面向对象的思路来进行分析&#xff1…

【AIGC-图片生成视频系列-3】AI视频随心而动:MotionCtrl的相机运动控制和物体运动控制

最近&#xff0c;「单张图片生成视频」相关工作很多&#xff0c;但运动控制的准确性依旧是个挑战&#xff0c;包括相机运动的控制以及物体运动控制。 然&#xff0c;MotionCtrl 横空出世。 一. 项目简介 MotionCtrl——一个相机运动控制、物体运动控制的视频工具&#xff0c…

WEB渗透—PHP反序列化(十一)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

如何在iterm2的命令行中快速移动

文章目录 一、打开Preferences设置二、进行key的映射三、修改键值四、参考文献 一、打开Preferences设置 二、进行key的映射 三、修改键值 四、参考文献 Mac下iTerm2光标按照单词快速移动设置

《企业数据资源相关会计处理暂行规定》学习笔记

附&#xff1a;2023年数据资源入表白皮书下载&#xff1a; 关注WX公众号&#xff1a; commindtech77&#xff0c; 获得数据资产相关白皮书下载地址 1. 回复关键字&#xff1a;数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字&#xff1a;光大银行 下载 光…

AIGC与计算机技术:人工智能生成内容的深度探索

AIGC与计算机技术&#xff1a;人工智能生成内容的深度探索 摘要&#xff1a;随着人工智能技术的快速发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;成为了计算机领域的前沿话题。本文将详细探讨AIGC的基本原理、技术应用和未来发展趋势&#xff0c;以及它对计…

OpenCV(Python)基础—9小时入门版

OpenCV(Python)基础—9小时入门版 # # Author : Mikigo # Time : 2021/12/1 # 一、一句话简介 OpenCV (Open Source Computer Vision Library) 是用 C 语言编写&#xff0c;提供 Python、Java 等语言 API的一个开源计算机视觉库。 二、安装 1、Debian 系使用 apt 安装 O…

Zookeeper-Zookeeper应用场景实战

1. Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。 第三方的Java客户端API&#xff0c;比如Curator。 ZooKeeper官方的客户端API提供了基本的操作…

【Transformer】深入理解Transformer模型1——初步认识了解

前言 Transformer模型出自论文&#xff1a;《Attention is All You Need》 2017年 近年来&#xff0c;在自然语言处理领域和图像处理领域&#xff0c;Transformer模型都受到了极为广泛的关注&#xff0c;很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍&#xff1a; jmeter自带的一个特性&#xff0c;可以通过指定的函数规则创建后进行调用该函数&#xff0c;在后续接口请求参数中进行调用 作用 &#xff08;1&#xff09;做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

【用户增长】引言:浅析游戏运营用户增长概念

1 游戏发行运营中的主要职能&#xff1a; ​ 一、发行运营通识l 运营介绍&#xff1a;职能分工、发行运营流程、职业发展能力及要求l 品类认知&#xff1a;行业品类布局、品类用户画像、运营节奏及特性&#xff0c;包含不同品类核心打法及长线运营思路l 海外运营&#xff1a;海…

旭日X3派开发板部署自己的yolov5模型

目录 使用Docker环境Docker镜像使用Docker配置阿里云镜像源准备模型和数据集模型验证模型转换模型准备准备校准数据转换模型 模型上板运行运行示例程序 模型调优 参考&#xff1a;AI工具链 环境部署&#xff0c;地平线X3J3算法工具链手册环境安装 使用Docker环境 在完成Docke…