Python 递归

Python---函数(二) 在一个函数的函数体内调用该函数本身,该函数就是递归函数。一个完整的递归操作由两部分组成,一部分是递归调用,一部分是递归终止条件,一般可使用if-else结构来判断递归的调用和递归的终止。示例结果。 阅读详情

学要学会递归要把握三大要素:一个前提和两个特性

1. 一个前提:目标明确

容易被忽略、而又非常重要的前提——明确你的想法:
你想要设计这个函数完成什么样的任务。

再说点的直白点,就是定义一个函数f(n),你要用f(n)实现哪个功能?

2. 特性一:基本特例

基本特例,也称作平凡(一般)情况,它是递归终止的情形。

也就是说在明确函数的目标之后,我们必须寻找出递归的结束条件。问题是如何找这个结束条件?也即,我们需要找出当参数取什么值时递归结束,之后直接把结果返回。

其实,这个条件并没有那么严格,也不用想那么多,只要根据这个参数的值,能够直接知道函数此时的结果是什么,就可以了。

举例:0-100求和

  • 结束条件选择 n==1 时

    def sum(n):
        if n == 0:
            return 0
        else:
            return sum(n-1) + n
    
    r = sum(100)
    print(r)
    
  • 结束条件选择 n <= 1时(即n取0和1)

    def sum(n):
        if n < 2: # or n <= 1
            return n
        else:
            return sum(n-1) + n
    
    r = sum(100)
    print(r)
    

这里可以看出,不论选择 n == 0 或者,n <=1 ,这两种情况下参数的取值都可以直接知道函数的结果,因为 sum(0) = 0,sum(1) = 1。

3. 特性二:定义规则

我们需要用一个规则来使其它非基本的情形转化为基本情形(有点类似数学归纳法)。

注意,这个部分往往是最难的部分,但是我们要明白我们要做的就是找出原函数的一个的等价关系式。

再说的直白点,就是确定参数n和参数n-1之间的关系。

最直白的解决方法就是,将函数的参数由n变为n-1,然后凑出与原函数等价的一个式子,比如上面的求和例子:

f(n) = 0 + 1 + 2 + ... + n-1 + n,而
f(n-1) = 0 + 1 + 2 + ... + n-1

要使得两个式子等价,则需要在f(n-1)的基础上加上一个变量n(注意这种情况,要灵活使用数字或者变量),
即:f(n) = f(n-1) + n
。同理,对于n的阶乘来说,就是:f(n) = n*f(n-1)

当然这些都是比较简单的例子,但是对于理解递归来说,至关重要!

参考:

  1. 为什么你学不会递归?告别递归,谈谈我的一些经验
  2. Python | 递归教程
Python 函数:Python 中的递归 一种更直接的方法是将学校分成几个部分,直到可以制作最小的部分来找到学生,也就是说,首先搜索她所在的年级,然后是班级会更有意义,然后您将能够更容易地找到她的位置。尽管由于 return 语句中存在函数名称,调用似乎是尾递归的,但这并不是因为在这种情况下调用是表达式的一部分。如果在递归函数中,其中的所有调用都是尾递归的,则称为尾递归。在尾递归函数中,函数完成的最后一个任务是递归调用,因此在递归调用发生后没有挂起的操作。在比较中,先将字符转换为大写,然后再进行比较,以减少同一元音的不同大小写之间的比较次数。 阅读详情

相关推荐

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

python函数(3)—— 递归

是指在函数的定义中使用函数自身的方法它至少有一个明确的递归结束的条件(否则就是一个死循环),能给出递归终止的处理方法,每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少。通过以上六个例题,我们能发现运用递归思路能很容易解决比较难处理的问题。毕竟人无完人,递归也是有确定的,它不可能一直递归下去,并且当输入的值太大,递归次数太多时,python 都会报错。

weixin_68256171的博客 1106

对10G/40Gphy中auto-negotiation功能调试

在近期有一个项目,是一台设备中发现mac与phy之间的信号质量有一些差,报文会出现很多的crc错误码。希望可以将mac与phy之间的工作模式改为10GBASE-KR/40GBASE-KR4,从而提高信号质量,减少crc错误码。要实现10GBASE-KR/40GBASE-KR4,需要打开auto-negotiation,所以,文章主要内容是如何开启自协商,以及相关参数的解释。 需要的文档: 1、802.3协议手册 2、所调试phy的芯片手册(我自己使用的是bcm的万兆phy) 万兆phy情况摘要 PHY寄存

MTzhang_22的博客 5829

Python递归算法详解

本文介绍了递归算法的基本原理、应用场景,并通过具体的Python代码示例详细讲解了递归算法的使用。递归是一种强大的算法设计技巧,能够解决许多复杂的问题。在应用递归算法时,需要注意递归终止条件的正确性,以避免无限递归的问题。通过掌握递归的原理和应用技巧,我们可以更好地理解和应用递归算法,提升问题解决的能力。

Rocky006的博客 4378

Ansys Zemax实战:5步搞定衍射光学元件(DOE)设计,附赠超透镜(metalens)避坑指南

本文详细介绍了使用Ansys Zemax进行衍射光学元件(DOE)和超透镜(metalens)设计的5步实战流程。从基础光学系统搭建到相位面设计验证,再到制造准备与实测对比,全面解析了OpticStudio中的关键技巧和常见避坑指南,帮助工程师高效完成复杂光学元件设计。

orange的博客 622

数字经济新质生产力数字化转型数据要素流通交易解决方案:数据要素化演进路径与管理、公共数据授权运营平台体系、数据底座、典型应用场景

数字经济的发展依赖于数据要素的有效流通与交易,数字化转型的核心在于数据的全生命周期管理和价值释放。数据要素化通过数据资源化、资产化和资本化的“三化”过程,实现其经济与社会价值。数据管理涵盖采集、存储、加工、分析等环节,支持数据的度量与交换。公共数据、企业数据和个人数据通过场内、场外及二级市场交易实现资本化。公共数据开发利用面临隐私泄露、监督管理难等痛点,目标是构建授权运营平台体系,确保数据流通的安全与效率。平台体系包括统一门户、授权管理、运营管理、合规监督等核心功能,支持明文、密文和可信交换流通方式。数据底

weixin_44094929的博客 1003

基础算法学习 | Python实现——递归

本文主要讲述递归的实现,以及如何设计递归函数,目的是为了加强对递归算法的理解,希望本文能够对对递归感到困惑的朋友有一点新的理解吧,其中的个人的理解也不是特别的深,因为递归这个东西真的不是一下子就能够理解的吧,看了很多递归算法,找到感觉也很重要

weixin_73938894的博客 2389

YOLOv9电力巡检实战:绝缘子破裂/鸟巢识别+无人机自动定位

摘要:本文聚焦电力输电线路巡检的效率与安全痛点,提出基于YOLOv9与无人机的智能巡检解决方案。针对绝缘子破裂、鸟巢等高危缺陷,通过“无人机改装-模型训练-缺陷识别-工单生成”四阶段工程落地流程,实现全自动化巡检。系统采用大疆M300无人机搭载RTK模块与Jetson边缘计算盒,结合改进YOLOv9模型实时识别5类缺陷,通过4G传输将GPS定位与缺陷数据同步至工单系统。实测表明,该方案巡检效率达50公里/天(较人工提升10倍),缺陷发现率95%(提升40%),事故预防率98%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1511

Python 递归(Recursion)

本文深入解析Python递归机制,从核心原理到实践应用全面阐述。递归通过函数自调用实现问题分解,必须包含基线条件和递归条件。执行过程依赖调用栈机制,存在默认1000层的深度限制。典型应用包括数学计算、树形结构处理和文件遍历。针对性能问题提出记忆化优化策略,并分析递归的栈溢出、重复计算等缺陷。展示快速排序、汉诺塔等进阶案例,强调基线条件完整性和深度控制的重要性。最后给出递归函数的最佳实践建议,包括类型提示和文档规范。

weixin_45422672的博客 558

【Claude】组织级认证限制报错已解决(4 种)

报错被禁用的是什么谁能解除应急方案整个 Console 组织Anthropic 支持换账户 / 订阅凭证API key 认证方式你的组织管理员用订阅/login订阅 OAuth 登录你的组织管理员用 API keyRoutines 功能你的组织所有者手动计划任务替代共同排查模式/status确认当前凭证;检查环境变量;看清报错消息里命名的是什么(key?组织访问?),对症清除;管理员层面的限制,找管理员解锁。

博客 1万+

【YOLOv10[基础]】热力图可视化实践③ | 热力图脚本升级 | 优化可视化效果 | 论文必备 | GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等

热力图可视化实践③ | 热力图脚本升级 | 优化可视化效果 | 论文必备 | 遥遥领先

静谧、淡雅 3221

python的递归_Python 递归

锲子先看一段函数defstory():s= """从前有个山,山里有座庙,庙里老和尚讲故事,讲的什么呢?"""print(s)story()story()初识递归递归的定义——在一个函数里再调用这个函数本身现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。递归的最大深度——997正如你们刚刚看到的,递归函数如果不受到外力的阻...

weixin_35925298的博客 1251

2025年7月5日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案

2025年7月5日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案

伶俐角少儿编程 898

递归算法经典实例python-递归案例python

广告关闭2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。而对应的中文翻译 ”递归" 却表达了两个意思:”递"+”归"。 这两个意思,正是递归思想的精华所在。 从这层次上来看,中文翻译反而更达意。 递归是静中有动,有去有回。 循环是动静如一,有去无回。 python递归常见使用汉诺塔python第二十二...

weixin_37988176的博客 5454

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python斐波那契递归_Python递归斐波那契示例

python斐波那契递归Good day, learners! In this tutorial we are going to learn about Python Recursion and use it for fibonacci sequence generation. In previous tutorial we discussed about Python Function and ...

从零开始的教程世界 1794

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python递归_Python当中的尾递归优化

本文讨论Python中尾递归优化以及尾递归优化原理。本文共讨论两点内容,一个是如何进行尾递归优化,一个是递归优化原理。如何进行尾递归优化Python当中实际上没有尾递归优化的功能,递归受到栈长度限制,例如我们用递归实现斐波那契数列计算的时候,def fib(i, current = 0, next = 1): if i == 0: return current else: ...

weixin_39735288的博客 351

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python之递归

所谓递归就是在函数定义中调用函数自身的方法,而递归的思想就是将规模大的问题转化为规模小的,具有与原来问题相同解法的问题来解决。那么问题来了,什么是最大递归深度?递归深度:通俗来讲就是自己调用自己的最大次数,在python中递归深度为1000,也就是说自己调用自己最多1000次,而其实,当调用次数小于1000时就已经抛出异常。

ma123222的博客 1588

Python函数的递归调用

一:递归的定义 函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指:在调用一个函数的过程当中,又直接或者间接地调用到了本身 Python对递归调用循环调用的次数有限制,为1000次 1.调用的例子: 直接调用本身 def f1(): print('是我') f1() f1() 间接调用本身 def f1(): print('我是f1') f2() def f2(): print('我是f12') f1() f1() 2.一段代码的循环运行方案有2

python学习者的博客 6185

Python递归与非递归算法的例子,七个练习

练习1 创建一个函数 power来为任意数字做幂运算n ** i #递归 def power(n,i): if i==1: return n return n*power(n,i-1) print(power(2,4)) 练习2 创建一一个函数,用来检查一个任意的字符串是否是回文字符串 ,如果是返回True,否则返回False #回文字符串,字符串从前往后念和从后往前念是一样的 #abcba #先...

weixin_46227398的博客 1881

python递归_python 递归

我想把Python中的递归作为一个专题讨论一下。我在学习的时候,尝试使用“Python递归”作为关键词,在Google和百度中搜索,发现结果大部分是对某个具体例子的递归应用讨论,而对我这样的小白来说,切入点有点高。而我现在需要做的,是从基础概念开始。想到讨论递归问题,是因为那个著名的“字典序”问题,但还是先从最基本的递归概念开始。我希望我讨论完了这个,自己对递归也有一个基本的了解了。递归的概念很简...

weixin_39624097的博客 150

python函数的递归调用

函数递归就是函数的递归调用,是函数嵌套调用的一种特殊形式,具体就是指在调用一个函数的过程中直接或者间接的调用到本身,递归的本质就是循环做重复的事情。在调用func的过程中又调用func,这就是直接调用函数本身;在调用func的过程中调用foo,而在调用foo的过程中又调用func,这就是间接调用func本身。通过上面的分析,两种情况下的函数递归调用都是一个无限循环的过程,Python为了防止函数递归进入无限循环对函数递归调用的深度做了限制,一旦超出限制就会抛出异常。

weixin_71807218的博客 2070

递归算法经典实例python-Python递归算法详解

递归的概念很简单,如果函数包含了对其自身的调用,该函数就是递归的。递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。在使用递归时,需要注意以下几点:递归就是在过程或函数里调用自身必须有一个明确的递归结束条件,称为递归出口。注意: 切勿忘记递归出口,避免函数无限调用。递归基本步骤每一个递归程序都遵循相同的基本步骤:1.初始化算法。递归程序通常需要一个开始时使用的...

weixin_37988176的博客 2229

python 之递归与非递归实现全排列

全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。公式:全排列数f(n)=n!(定义 n 为正整数)# 给定的元素中,抽取一定数量的元素进行排列,求排列的总数# 现以26个字母为例,从 a 开始,n 个字母的不同种排列数量为 n! 将这 n! 种不同排列进行输出  1 &lt;= n &lt;= 2...

yzmumu的博客 2088

python递归详解_python递归

1.1 递归讲解1、定义1. 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。2、递归特性1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由...

weixin_39916479的博客 405
上一篇: Python 进程与线程(Process vs. Thread)
下一篇: MapReduce 以及 Python中的Map和Reduce
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值