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

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇: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,递归这个思想是很重要的在后期的学习中我也会不断更新,各位大佬们,觉得还不错的话,互关互赞一下吧,蟹蟹

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GroundingDINO-根据文本提示检测任意目标

1. 背景介绍 GroundingDINO是一种新的SOTA零样本物体检测模型。在这篇文章中&#xff0c;我们将讨论Grounding DINO模型的优势&#xff0c;分析其具体的模型架构&#xff0c;并提供真实的测试样例。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2.零样本目标检测 大多…

第七课:计算机网络、互联网及万维网(WWW)

第七课&#xff1a;计算机网络、互联网及万维网&#xff08;WWW&#xff09; 第二十八章&#xff1a;计算机网络1、局域网 Local Area Networks - LAN2、媒体访问控制地址 Media Access Control address - MAC3、载波侦听多路访问 Carrier Sense Multiple Access - CSMA4、指数…

海凌科HLK-V2语音识别模块更新词条

简介 HLK-V20 是海凌科的离线语音识别模块, 中英文不同时支持, 只支持中文/英文, 具体识别看每次的SDK更新设置;资料下载 可以在微信公众包搜索海凌科或HI-LINK, 下载资料 感知模块->HLK-V20 模块限制 中英文被限制, 需要根据你在官网设置的SDK信息进行确定;可以仅设置3…

Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性

目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…

听GPT 讲Rust源代码--src/tools(38)

File: rust/src/tools/clippy/clippy_dev/src/lib.rs rust/src/tools/clippy/clippy_dev/src/lib.rs文件是Clippy开发工具的入口文件&#xff0c;其作用是提供Clippy开发过程中所需的功能和工具。Clippy是一个Rust代码的静态分析工具&#xff0c;用于提供各种有用的代码规范、编…

Linux网络编程学习心得.5

1.libevent编写tcp服务器流程 创建套接字 绑定 监听 创建event_base根节点 初始化上树节点 lfd 上树 循环监听 收尾 普通的event事件 文件描述符 事件(底层缓冲区的读事件或者写事件) 触发 回调 高级的event事件 bufferevent事件 核心: 一个文件描述符 两…

攻防技术-单包攻击防范:扫描、畸形、特殊(HCIP)

单包攻击类型介绍 一、扫描窥探攻击 1、地址扫描攻击防范 攻击介绍 运用ping程序探测目标地址&#xff0c;确定目标系统是否存活。也可使用TCP/UDP报文对目标系统发起探测&#xff08;如TCP ping&#xff09;。 防御方法 检测进入防火墙的ICMP、TCP和UDP报文&#xff0c;根…

性能优化-如何提高cache命中率

本文主要介绍性能优化领域常见的cache的命中率问题&#xff0c;旨在全面的介绍提高cache命中率的方法&#xff0c;以供大家编写出性能友好的代码&#xff0c;并且可以应对性能优化领域的面试问题。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &am…

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化&#xff1a;将对象转化成数组或者字符串的形式 2.反序列化&#xff1a;将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格&#xff0c;不同人有不同的书写情况&#xff0c;可能还会出现换行的情况 为此为了…

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

文章目录 一、查找元素 - set#find 函数1、函数原型 简介2、代码示例 - set#find 函数 二、获取元素个数 - set#count 函数1、函数原型 简介2、代码示例 - set#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个…

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

os 概述 os: Operating System os 使用 导入 os 模块 查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))os 操作系统相关 os.name&#xff1a;获取系统名称os.environ&#xff1a;获取系统环境变量信…

西北工业大学计算机组成原理实验报告——verilog后两次

在单周期CPU的基础上开发实现流水线CPU 说明&#xff1a; 1. 该PDF带有大纲功能&#xff0c;点击大纲中的对应标题&#xff0c;可以快速跳转。 2. 目录层级为&#xff1a; 一、一级标题 &#xff08;二&#xff09;二级标题 &#xff08;3&#xff09;三级标题 4.四级标…

Stable Diffusion Webui在Linux服务器第一次运行不能连接huggingface

第一次运行stable-diffusion-webui出现了如下错误 (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/vocab.json (Caused by ConnectTimeoutError(<urllib3.connecti…

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…

C单片机数据类型与格式化

C语言数据类型 关键字位数表示范围stdint关键字ST关键字举例unsigned char80 ~ 255uint8_tu8u8 data 128char8-128 ~ 127int8_ts8s8 temperature 25unsigned short160 ~ 65535uint16_tu16u16 counter 5000short16-32768 ~ 32767int16_ts16s16 position 32767unsigned int3…

基于C#串口通信的智能仪表充电管理系统

基于C#串口通信的智能仪表充电管理系统 谁要源码的话加入群聊收费50元。提供代码&#xff0c;加QQ66987475。 一、 系统描述 该系统管理矿用检测仪器的充电、领取、归还、考勤等基本功能&#xff0c;一套系统拓补图如下&#xff1a; 由上位机、打印机、大屏幕、人脸识别仪…

腾讯云轻量应用服务器是什么?详细介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

力扣:62. 不同路径(动态规划,附python二维数组的定义)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

mxxWechatBot微信机器人V2版本文档说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里 一、前言二、mxxWechatBot流程图三、怎么使用&#xff1f; 一、前言 经过不断地探索与研究&#xff0c;mxxWechatBot正式上线&#xff0c;届时全面开放使用。 mxxWechatBot&am…

goframe v2 模板引擎的用法

这里用的goframe v2框架 提醒&#xff1a;下面的import 引入的控制器和api&#xff0c;根据自己实际项目路径 main函数 import ("context""github.com/gogf/gf/v2/net/ghttp""github.com/gzdzh/dzhgo/modules/dzhCms/controller/web""gith…