Python实战基础14-递归函数

news2024/11/20 13:39:48

1、什么是递归函数

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就递归函数。

遵循:

  1. 必须要有出口
  2. 每次递归向出口靠近
# 1-10 打印数字
def test(i):

    if i == 10:
        print('10')
    else:
        print(i)
        i += 1
        test(i)
test(1)

# 1-10 的累加和
def test1(i):
    if i == 5:
        return 5
    else:
        return i + test1(i + 1)
r = test1(1)
print(r)

 

2、递归函数的作用

举个例子,计算n!= 1*2*3*…*n

2.1 解决办法1:使用循环来完成

def cal(num):
    result,i = 1,1
    while i <= num:
        result *= i
        i += 1
    return result
print(cal(3))

2.2 看阶乘的规律

1!=1

2!=2 × 1 = 2 × 1!

3!=3 × 2 × 1 = 3 × 2!

4!=4 × 3 × 2 × 1 = 4 × 3!

……

n!=n × (n-1)!

2.3 解决方法2:使用递归来实现

def factorial(num):
    result = 1
    if num == 1:
        return 1
    result = num * factorial(num -1)
    return result
print(factorial(3))

原理

 factorial(3)调用过程:

2.4 练习 

使用递归实现斐波那契数列。1、1、2、3、5、8、13、21、34、……

在数学上,斐波那契数列以如下被递推的方法定义:

F(1)=1,

F(2)=1,

F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。

代码实现如下:

# 方法一
def my_num(x):
    if x == 1:
        return 1
    elif x == 2:
        return 1
    else:
        return my_num(x-1) + my_num(x -2)

for i in range(1,10):
    print(my_num(i))

# 方法二
def fibo(n):
    "递归函数实现斐波那契数列"
    if n == 1 or n == 2:
        return 1
    else:
        return fibo(n-1) + fibo(n-2)
if __name__ == '__main__':
    n = int(input('请输入数列的项数:'))
    res = fibo(n)
    print(res)

# 一行代码实现斐波那契数列
n = int(input("请输入数列的项数:"))
fibo = [x[0] for x in [(a[i][0], a.append([a[i][1], a[i][0]+a[i][1]])) for a in ([[1, 1]], ) for i in range(n)]]
print(fibo)

2.5 问题总结

1、RecursionError: maximum recursion depth exceeded while calling a Python object

  • 问题描述:递归超过了最大的深度
  • 问题原因:python的递归深度默认为1000。当递归深度超过1000时,就会报错。
  • 解决方法:将递归的深度修改的大一些
    import sys 
    sys.setrecursionlimit(100000)
    
  • 查看递归层数
    def recursion(depth):
        depth += 1
        print(depth)
        recursion(depth)
    
    recursion(0)

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

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

相关文章

海外网红营销ROI评估:出海品牌如何科学衡量投资回报?

随着全球化的不断推进&#xff0c;出海品牌越来越多地将目光投向海外市场&#xff0c;并利用海外网红的影响力进行营销。然而&#xff0c;对于出海品牌而言&#xff0c;如何科学衡量海外网红营销的投资回报率&#xff08;ROI&#xff09;却是一个关键的挑战。本文Nox聚星将和大…

Phaser笔记-精灵(sprite)的使用

如下&#xff1a; 使用逻辑如下&#xff1a; ①设置好physics&#xff1b; ②将资源添加到spritesheet&#xff1b; ③在physics中添加sprite&#xff1b; ④创建anims&#xff1b; ⑤播放anims&#xff1b; 完整代码如下&#xff1a; import phaser;class PlayGame exte…

进程间通信(命名管道)

目录&#xff1a; 1.命名管道 2.创建命名管道 --------------------------------------------------------------------------------------------------------------------------------- 1.命名管道 1.管道的一个应用限制就是只能在具有共同祖先&#xff08;具有亲缘关系&…

AI落地:高效学习指南

高效学习中有一个共识&#xff1a;学习最小可用知识&#xff0c;然后立马开始实践&#xff0c;做中学&#xff0c;不断获得反馈&#xff0c;不断在实践中改进。 现实生活中&#xff0c;如果我们想实现这种高效学习&#xff0c;基本上只能找一个老师1对1指导&#xff0c;费用贵…

[C语言][典例详解]打印杨辉三角(找规律简单实现)

目录 杨辉三角的相关知识 杨辉三角图&#xff1a; 杨辉三角的规律 在编程中实现 第一步 &#xff1a;我们先实现数字的打印&#xff0c;后面再加上空格构成三角形形状&#xff1b; ​编辑 1.首先我们可以直观的看出三角形的两个斜边都是1&#xff1b;所以我们先打印斜边的…

S型平滑函数功能块(SCL+梯形图)

S型平滑和斜坡平滑函数从字面理解也知道大概用处了,这里就不再具体阐述。S型曲线在温控上面的应用请参看系列专栏,链接如下: 带平滑功能的斜坡函数(多段曲线控温纯S型曲线SCL源代码+完整算法分析)_s斜坡函数_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线,…

Java 集合和数组,集合和字符串,数组和字符串的相互转换

在 Java 中&#xff0c;可以通过以下方式实现集合、数组和字符串之间的相互转换。 一、集合和数组的相互转化 ①、将集合转为数组&#xff1a;&#xff08;toArray 方法&#xff09; List<String> list new ArrayList<>(); list.add("apple"); lis…

手写服务限流6种实现方式

服务限流&#xff0c;我有 6 种实现方式 ImportNew 2023-05-29 11:31 发表于上海 以下文章来源于码农参上 &#xff0c;作者Dr Hydra 码农参上. 专注后端技术分享&#xff0c;有趣、深入、直接&#xff0c;与你聊聊技术。 今天来和大家聊聊服务的限流。 服务限流&#xff0…

2023 年 14 个最佳隐私和安全 Linux 发行版

随着数字时代的到来&#xff0c;隐私和安全成为了越来越重要的议题。对于那些关注隐私和安全的用户来说&#xff0c;选择一款专注于保护用户数据和系统安全的Linux发行版是至关重要的。在本文中&#xff0c;我们将介绍2023年14个最佳的隐私和安全Linux发行版&#xff0c;这些发…

stm32学习笔记-11 SPI通信

11 SPI通信 文章目录 11 SPI通信11.1 SPI通信协议11.2 W25Q64简介11.3 实验&#xff1a;软件SPI读写W25Q6411.4 SPI通信外设11.5 实验&#xff1a;硬件SPI读写W25Q64 注&#xff1a;笔记主要参考B站 江科大自化协 教学视频“ STM32入门教程-2023持续更新中”。 注&#xff1a…

Acrel-2000系列监控系统在亚运手球比赛馆建设

10kV供配电工程中的应用 摘要:智能化配电监控系统是数字化和信息化时代应运而生的产物&#xff0c;已经被广泛应用于电网用户侧楼宇、体育场馆、科研设施、机场、交通、医院、电力和石化行业等诸多领域的高/低压变配电系统中。安科瑞自研的Acrel-2000系列监控系统可监控高压开…

【自动化测试】自动化测试框架那些事儿!

无论是在自动化测试实践&#xff0c;还是日常交流中&#xff0c;经常听到一个词&#xff1a;框架。在教学的过程中&#xff0c;同学们一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料&#xff0c;加上一些实践&#xff0c;算是对“框架”有了一些理解…

OceanMind海睿思入选《2023中国企业数智化转型全景图中国数据智能产业图谱》

近日&#xff0c;国内知名大数据产业创新服务媒体数据猿携手上海大数据联盟发布了《2023中国企业数智化转型升级服务全景图/产业图谱》和《2023中国数据智能产业图谱》。 两份图谱系统梳理了中国数智化转型升级及数据智能行业发展现状和脉络&#xff0c;评选出极具商业合作价值…

​​​​Linux Shell 实现一键部署Oracle21 zip包方式

oracle前言 Oracle开发的关系数据库产品因性能卓越而闻名&#xff0c;Oracle数据库产品为财富排行榜上的前1000家公司所采用&#xff0c;许多大型网站也选用了Oracle系统&#xff0c;是世界最好的数据库产品。此外&#xff0c;Oracle公司还开发其他应用程序和软件。同时&#…

ABeam News|ABeam荣获「SAP BTP 卓越业务分析奖」

近日&#xff0c;「云铸数卯&#xff0c;榫合万象」SAP BTP 客户与生态峰会在桂林圆满落幕。此次年度峰会以全面的视角展现 RISE with SAPSAP BTP如何构建“新型中国企业”数字底座。 ABeam Consulting作为SAP金牌合作伙伴受邀出席&#xff0c;大中华区董事长兼总经理中野洋辅…

Ubuntu Go语言环境配置【GPT-4版】

目录 go语言的培训网课安装goGPT-4给出的过程在VSCode里怎样正确配置好Go的调试相关设置&#xff1f;如果我在Visual Studio Code中安装Go语言的相关工具总是失败怎么办&#xff1f;我已重启Visual Studio Code&#xff0c;接下来应该怎样检查日志&#xff1f;如果我还是不能成…

Vue2中给对象添加新属性界面不刷新

Vue2中给对象添加新属性界面不刷新? Vue2.x的响应式 实现原理 对象类型&#xff1a;通过Object.defineProperty()对属性的读取、修改进行拦截&#xff08;数据劫持&#xff09;。数组类型&#xff1a;通过重写更新数组的一系列方法来实现拦截。&#xff08;对数组的变更方法…

敏捷世界还需要有QA吗?

敏捷开发模型现在已经被越来越多的公司熟知并使用&#xff0c;很多公司会选择敏捷开发模式的转型&#xff0c;其主要目的就是为了不断适应变化以及客户快速交付的诉求。为什么敏捷开发能够被诸多大众接受&#xff1f;可以从两个维度来看&#xff1a; 首先&#xff0c;从开发人员…

条码系统(PC/PDA)对接NC接口功能

条码系统功能清单功能模块功能菜单明细菜单支持终端功能描述业务流程框架pc端框架搭建 PC端整体框架工具搭建,提供字典配置,PDA端的参数配置,NC数据源,NC接口调用工具等 PDA端框架搭建 PDA端安卓端框架基础功能APP创建,数据源,功能菜单等 服务器环境部署 PC端/PDA端pc端/P…

使用YOLOV8实现滑块缺口验证码识别,并使用Fastdeploy快速部署,精度高达99%!!

前言:首先大家对滑块缺口验证码的识别应该有很多经验了,大部分人可能阅读过我的文章或者其他人的文章,能从各方了解到,滑块缺口的各种实现方式,例如模板匹配、边缘检测、提取透明通道、yolov5,paddledection等,此篇文章将会讲解yolov8的使用和训练,yolov8相对于yolov5有…