函数-递归调用

目录

一、基本介绍

二、递归能解决什么问题?

三、递归案例

1、打印问题

 2、阶乘问题

四、递归重要规则

五、课堂练习

1、斐波那契数

2、猴子吃桃问题

3、汉诺塔


一、基本介绍

1、简单地说:递归就是函数自己调用自己,每次调用时传入不同的值

2、递归有助于编程者解决复杂问题,同时可以让代码变得简洁

二、递归能解决什么问题?

1、各种数学问题,如8皇后问题,汉诺塔,阶乘问题,迷宫问题等等

2、各种算法中也会使用到递归,如快排,归并排序,二分查找,分治算法等

3、将用栈解决的问题->递归,代码比较简洁

三、递归案例

1、打印问题

# 打印问题
def test(n):if n>2:test(n-1)print("n =", n)# 调用test(4)
test(4)

 2、阶乘问题

# 阶乘问题
def factorial(n):if n==1:return 1else:return factorial(n-1)*n# 打印4的阶乘
print(factorial(4))

四、递归重要规则

1、执行一个函数时,就创建一个新的空间(栈空间)

2、函数的变量是独立的,比如,变量n

3、递归必须向退出递归的条件逼近,否则就是无限递归,就会出现RecursionError: maximum recursion depth exceeded

4、当一个函数执行完毕,或遇到return,就会返回,遵守谁调用,就将结果返回给谁

五、课堂练习

1、斐波那契数

请使用递归的方式求出斐波那契数1,1,2,3,5,8,13...给你一个整数n,求出它的值是多少?

# 斐波那契数
def fbn(n):"""功能:返回n对应的斐波那契数:param n::return: """if n==1 or n==2:return 1# 如果n>2,则对应的斐波那契数为n-1和n-2对应的斐波那契数的和else:return fbn(n-1)+fbn(n-2)# 完成测试
print(fbn(7))  # 13

2、猴子吃桃问题

猴子吃桃问题:有一堆桃子,猴子第1天吃了其中的一半,并再多吃一个!以后每天猴子都吃其中的一半,然后再多吃一个。当到第10天时,想再吃时(即还没有吃),发现只有1个桃子了。问题:最初有多少个桃子?

# 猴子吃桃问题
"""思路分析:1、day==10时,有桃子数 12、day==9时,day9-day9/2-1=day10有桃子数 day9=(day10+1)*23、day==8时,有桃子数 day8=(day9+1)*2
"""# 定义函数,返回对应天数对应的桃子数
def peach(day):if day==10:return 1# 如果是1<=day<10,的范围就是从后一天开始推导else:return (peach(day+1)+1)*2# 完成测试
print("最初的桃子数为:", peach(1))  # 1534

3、汉诺塔

 

# 汉诺塔
def hanoi_tower(num, a, b, c):"""输出指定 num个盘子的移动顺序:param num: 指定盘子数:param a: 表示A柱子:param b: 表示B柱子:param c: 表示C柱子:return:"""# 如果只有一个盘子if num == 1:print("第1个盘从:", a, "->", c)else:# 有多个盘,我们认为只有两个,上面所有的盘和最下面的盘# 移动上面所有的盘从A移动到B柱子,这个过程会借助到C柱子hanoi_tower(num - 1, a, c, b)# 移动最下面的盘,从A移动到C柱子print(f"第{num}个盘从: {a} -> {c}")# 把上面所有的盘从B移动到C柱子,这个过程会借助到A柱子hanoi_tower(num - 1, b, a, c)# 完成测试
hanoi_tower(3, "A", "B", "C")

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

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

相关文章

react中配置路径别名@

1.说明 在react项目中想要使用代替“src/”需要在项目根目录下配置两个文件&#xff0c;craco.config.js和sconfig.json&#xff1b; craco.config.js配置文件是用于项目解读为“src/” jsconfig.json配置文件是用于vsCode在编辑过程是输入后可以将src下的文件目录进行自动联…

阿里云OS Copilot:解锁操作系统运维与编程的智能助手

目录 引言 OS Copilot简介 OS Copilot的环境准备 创建实验资源 安全设置 设置安全组端口 创建阿里云AccessKey 准备系统环境 OS Copilot的实操 场景一、用OS Copilot写脚本和注释代码 场景二、使用OS Copilot进行对话问答 场景三、使用OS Copilot辅助编程学习 清理…

腾讯云k8s相关

1.某个服务腾讯云内网地址&#xff1f; 比如&#xff1a;spiderflow-web正式环境&#xff1a;http://spiderflow-web.sd-backend:30001 试一试&#xff1a;

前端使用 Konva 实现可视化设计器(17)- 素材嵌套 - 生成阶段

本章主要实现素材的嵌套&#xff08;生成阶段&#xff09;这意味着可以拖入画布的对象&#xff0c;不只是图片素材&#xff0c;还可以是嵌套的图片和图形。在未来的章节中&#xff0c;应该可以实现素材成组/解散的效果。 最近难以抽出时间继续本示例更新&#xff0c;以至于拖到…

C语言数据结构课设:基于EasyX前端界面的飞机订票系统

数据结构课程设计说明书 学 院、系&#xff1a; 软件学院 专 业&#xff1a; 软件工程 班 级&#xff1a; 学 生 姓 名&#xff1a; 范 学 号&#xff1a; 设 计 题 目&#xff1a; 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

兰州交通大学电子与信息工程学院师资能力提升培训班圆满结束

7月21日&#xff0c;兰州交通大学电子与信息工程学院携手泰迪智能科技开展的“师资能力提升培训班&#xff08;兰州交通大学电子与信息工程学院专场&#xff09;”圆满结束&#xff0c;电子与信息工程学院副院长申东、泰迪智能科技区域总监曹玉红&#xff0c;教学组代表杨惠及电…

今日科普:什么是脑血管畸形,该怎么治疗?

谈及脑血管疾病&#xff0c;人们往往存在一种误解&#xff0c;认为这是老年群体的专属问题。然而&#xff0c;事实并非如此&#xff0c;尤其是脑动静脉畸形&#xff08;AVM&#xff09;这一特殊类型&#xff0c;它更倾向于侵袭20至40岁的青壮年人群。那么&#xff0c;脑血管畸形…

Transformer是什么?如何理解Transformer?

一、Transformer是什么 Transformer是一种深度学习模型架构&#xff0c;最初由Google的研究团队在2017年提出。这种架构最早用于自然语言处理&#xff08;NLP&#xff09;&#xff0c;但后来也在其他领域表现出色。Transformer的关键特点是其自注意力机制&#xff08;Self-Att…

第20讲:EtherCAT网络基础

EtherCAT概述 一、定义 二、EtherCAT原理 1、以太网帧通过到站不停车的方式进行数据交换 (1)如图,当中走过的就是以太网帧。当它经过从站的时候不会停留,但是它会跟从站进行信息交互。 即会把从站需要发送的信息给到了以太网帧里面去,然后把从站需要的信息,从以太网帧里…

河南萌新联赛2024第(二)场:南阳理工学院

A 国际旅行Ⅰ D A*BBBB F 水灵灵的小学弟 H 狼狼的备忘录 I 重生之zbk要拿回属于他的一切 J 这是签到 ##A 国际旅行Ⅰ 链接&#xff1a;https://ac.nowcoder.com/acm/contest/87255/A 来源&#xff1a;牛客网 题目描述 很久很久以前&#xff0c;有 n n n 个国家&#xff0c;第…

构建一个具有深色模式的简单React Web应用

在当今的Web开发世界里,创建一个既美观又功能丰富的用户界面是至关重要的。在本文中,我们将探讨如何使用React构建一个简单但功能强大的Web应用,它包含导航栏、内容展示区域和深色模式切换功能。 项目概述 我们的目标是创建一个具有以下特性的Web应用: 左侧导航栏,包含四个链…

MySQL 约束 (constraint)

文章目录 约束&#xff08;constraint)列级约束和表级约束给约束起名字&#xff08;constraint)非空约束&#xff08;no null)检查约束&#xff08;check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 &#xff08;auto_increment) 外键约束外什…

IP协议和路由转发

文章目录 IP协议IP报头网段划分特殊的IP私有IP和公有IP IP分片 路由 IP协议 IP协议提供了一种能力&#xff0c;将数据报从A主机送到B主机&#xff0c;TCP可以保证可靠性&#xff0c;所以TCP/IP协议可以将数据可靠的从A主机送到B主机。 IP报头 4位版本号(version): 指定IP协议…

Unity UGUI 之 Slider

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Slider是什么 滑块&#xff0c;由三部分组成&#xff1a;背景 填充条 手柄 填充条就是…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染&#xff01;这一次内容比较多&#xff0c;我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步&#xff0c;还是老规矩&#xff0c;先准备好接口函数。方便我们的页面组件拿到对…

华盈生物-小分子靶点筛选服务:助力药物发现的利器

在药物发现的过程中&#xff0c;确定小分子化合物的靶点是至关重要的一步。华盈生物为科学家们提供了两种高效的小分子靶点筛选方案&#xff0c;助力研究人员精准锁定靶点&#xff0c;加速新药研发进程。 方案一&#xff1a;荧光标记与HuProt人类蛋白质组芯片结合 华盈生物的H…

软件设计之Java入门视频(19)

软件设计之Java入门视频(19) 视频教程来自B站尚硅谷&#xff1a; 尚硅谷Java入门视频教程&#xff0c;宋红康java基础视频 相关文件资料&#xff08;百度网盘&#xff09; 提取密码&#xff1a;8op3 idea 下载可以关注 软件管家 公众号 学习内容&#xff1a; 该视频共分为1-7…

三种方法加密图纸!2024如何对CAD图纸进行加密?

在2024年的今天&#xff0c;随着企业对数据安全意识的不断提高&#xff0c;对CAD图纸进行加密成为了保护知识产权和商业机密的重要手段。无论是建筑设计、机械制造&#xff0c;还是电子工程领域&#xff0c;CAD图纸都承载着核心的设计理念和技术细节&#xff0c;因此&#xff0…

音视频入门基础:PCM专题(3)——使用Audacity工具分析PCM音频文件

音视频入门基础&#xff1a;PCM专题系列文章&#xff1a; 音视频入门基础&#xff1a;PCM专题&#xff08;1&#xff09;——使用FFmpeg命令生成PCM音频文件并播放 音视频入门基础&#xff1a;PCM专题&#xff08;2&#xff09;——使用Qt播放PCM音频文件 音视频入门基础&am…

LabVIEW多种测试仪器集成控制系统

在现代工业生产与科研领域&#xff0c;对测试设备的需求日益增长。传统的手动操作测试不仅效率低下&#xff0c;而且易出错。本项目通过集成控制系统&#xff0c;实现了自动化控制&#xff0c;降低操作复杂度和错误率&#xff0c;提高生产和研究效率。 系统组成与硬件选择 系…