python中递归函数写法_python递归函数用法详解

上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解。

关于递归:

百度解释:是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。

总结理解:递归就是在函数内部调用自己的函数被称之为递归。

实例演示:

#直接调用自己:def func: print('from func') func

Func

#间接调用自己def foo: print('from foo') bar

def bar: print('from bar') foo

Foo

#递归的实现:def age(n): if n == 1: return 18 return age(n-1)+2

print(age(5))

# age(5)=age(4)+2 第一次进入# age(4)=age(3)+2 第二次进入# age(3)=age(2)+2 第三次进入# age(2)=age(1)+2 第四次进入# age(1)=18 第五次进入,最后判断终止条件

# age(n)=age(n-1)+2 #n>1 递归终止条件# age(1)=18 #n=1 等于终止条件

递归的回溯与递推

递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推。回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯。

# 实例l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15,[16,[17,]],19]]]]]]]

def search(l): for item in l: if type(item) is list: search(item) else: print(item)

search(l)

阶乘实例代码:

def fact(n): if n==1: return 1 return n * fact(n -1)

上面就是一个实现阶层的递归函数,我们来试一试。

>>> fact(1)1>>> fact(5)120>>>fact(100)93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

来看一看计算过程:

===> fact(5)

===> 5 * fact(4)

===> 5 * (4 * fact(3))

===> 5 * (4 * (3 * fact(2)))

===> 5 * (4 * (3 * (2 * fact(1))))

===> 5 * (4 * (3 * (2 * 1)))

===> 5 * (4 * (3 * 2))

===> 5 * (4 * 6)

===> 5 * 24

===> 120

斐波那契数列

def fib(n): if n <2: return n else: return fib(n -1) + fib(n -2)

汉诺塔

def hanoti(n,x1,x2,x3): if(n == 1): print('move:',x1,'-->',x3) return hanoti(n-1,x1,x3,x2) print('move:',x1,'-->',x3) hanoti(n-1,x2,x1,x3)

到此这篇关于python递归函数用法详解的文章就介绍到这了,更多相关python递归函数用法介绍内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: python递归函数用法详解

本文地址: http://www.cppcns.com/jiaoben/python/357821.html

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

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

相关文章

计算机实践ps折扇,用PS打造一把水墨画折扇的教程

一、新建一个600 * 400像素的文件&#xff0c;背景填充为白色&#xff0c;新建一个图层按Alt Ctrl ’调出往格线&#xff0c;然后选择钢笔工具勾出下图所示的路径。二、按Ctrl Enter把路径转为选区&#xff0c;填充为40%灰&#xff0c;再新建一个图层&#xff0c;在下端点一…

输出 Hello World 混乱C语言的源代码

下面的六个程序片段主要完成这些事情&#xff1a;输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过&#xff0c;只有最后一个需要动用C 的编译器g 才能编程通过。lns"http://www.w3.org/2000/svg" x"0px" y"0px" viewbox&…

电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率

开启高效设计&#xff0c;拒绝每天加班&#xff0c;设计助理插件&#xff0c;设计师高效设计神器&#xff0c;让你早下班的设计神器&#xff1b;今天介绍一款非常人性化的插件&#xff0c;尤其适合做电商设计的小伙伴设计助理插件官网视频介绍↓设计助理插件https://www.zhihu.…

hibernate乐观锁_Hibernate Collection乐观锁定

hibernate乐观锁介绍 Hibernate提供了一种乐观的锁定机制 &#xff0c;即使长时间通话也可以防止更新丢失 。 结合实体存储&#xff0c;跨越多个用户请求&#xff08;扩展的持久性上下文或分离的实体&#xff09;&#xff0c;Hibernate可以保证应用程序级的可重复读取 。 脏检…

turtle fillcolor_使Python中的turtle模块画图两只小羊

import turtle import time import math as m class Sheep(object):def __init__(self,xsize):self.t turtle.Turtle()self.xsize xsizet self.t# 画笔设置t.screen.screensize(canvwidth1000,canvheight500,bgwhite)t.pensize(2)t.speed(10)# t.hideturtle()#初始化画笔位置…

计算机鼠标介绍教学反思,《玩转鼠标》教学反思

《玩转鼠标》教学反思《玩转鼠标》是浙江摄影出版社出版的小学信息技术三年级第一单元中的第3课。这节课其实是上一节课的延伸&#xff0c;是一节复习课&#xff0c;起到巩固强化的目的&#xff0c;主要任务是让学生熟练掌握鼠标的基本操作方法&#xff0c;学会软件的打开和关闭…

openshift_在OpenShift上托管的WildFly实例上进行Arquillian测试

openshift技术提示&#xff03;54解释了如何为现有Java EE项目启用Arquillian。 在该技巧中&#xff0c;测试是针对本地安装的WildFly服务器运行的。 如果此WildFly实例在OpenShift上运行&#xff0c;那么同一个适配器也可以工作吗&#xff1f; 没有&#xff01; 因为与xlocal…

C语言实现魔方阵代码及解析

问题描述编写程序&#xff0c;实现如下表所示的5-魔方阵。172418152357141646132022101219213111825295-魔方阵问题分析所谓“n-魔方阵”&#xff0c;指的是使用1〜n2共n2个自然数排列成一个nn的方阵&#xff0c;其中n为奇数&#xff1b;该方阵的每行、每列及对角线元素之和都相…

600度近视眼恢复方法_近视孩子的家长看看:600度以上近视可致盲,不花钱恢复视力法...

现在孩子近视早已经不是什么新鲜事了&#xff0c;一个班级里面有3分之一的孩子都近视&#xff0c;数据显示&#xff1a;目前中国学生近视发病率接近60%&#xff0c;居世界首位&#xff01;中小学生近视率已达34.6%&#xff0c;高中近视率已达70%。患者人数超过六千万&#xff0…

xbox360 功率测试软件,【外星人 Alpha ASM100-1580 游戏主机使用总结】性能|电压|功耗|跑分_摘要频道_什么值得买...

外星人 Alpha ASM100-1580 游戏主机使用总结(性能|电压|功耗|跑分)在讨论性能之前&#xff0c;再最后看一看电源。NUC电源外置是必然&#xff0c;除了体积之外&#xff0c;还要考虑散热&#xff0c;所以&#xff0c;电源外置至少在目前来看还是最优解。这款电源是台达电子代工的…

openfire消息通知推送_微信小游戏内测「订阅消息」能力,这是召回用户的「大杀器」吗?...

作者&#xff1a;蒋鸿昌本文来源于「知晓程序」公众号。知晓云后端云服务&#xff0c;让你的小程序开发快人一步&#xff0c;添加「minsupport3」了解详情。知晓云​cloud.minapp.com一位投资人曾把最近 3 年微信公开课 Pro 版上张小龙的演讲称为「小程序 3 篇」&#xff1a;如…

api 数据gzip压缩_如何使用GZip和Jersey压缩Java REST API中的响应

api 数据gzip压缩在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0…

c语言心形告白代码实现

1.彩色告白includeincludeincludeincludedefine U 0.1define V 0.053void SetColor(unsigned short ForeColor,unsigned short BackGroundColor){HANDLE hConGetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor)|(BackGroundColor16));}int main(){int …

obs可以推到中转服务器吗,能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?...

"可以。请参考以下方法进行设置。使用OBS进行直播设置 > 串流 > 串流类型&#xff1a;自定义流媒体服务器URL&#xff1a;填写网易服务器提供的推流地址中&#xff0c;从头到live的部分&#xff0c;例如&#xff1a;rtmp://p12345678.live.126.net/live流密钥&#…

mysql 隐藏中间四位_MySQL知识体系——索引

本文直切主题&#xff0c;针对InnoDB引擎描述索引及优化策略。在开始之前&#xff0c;需要读者了解&#xff1a;二叉查找树(包括2-3查找树、红黑树等数据结构)MySQL的InnoDB引擎基础知识索引初探要了解索引&#xff0c;当然要了解其数据结构。树有很多应用&#xff0c;流行的用…

python中属于私有属性的是_Python中的实例属性和私有属性

相关知识点 实例属性 实例属性和类属性的区别在于实例属性定义在类的__init__()魔法方法中&#xff0c;而类属性定义在类下&#xff1a; 1 classC:2 b 1 #类属性 3 4 def __init__(self):5 self.x None #实例属性 对于类属性这里不做说明&#xff0c;主要描述实例属性&#x…

osgi cxf_所有OSGi套件的通用CXF请求拦截器

osgi cxf几个月以来&#xff0c;我一直在研究Apache CXF&#xff0c;Karaf和Felix&#xff0c;我发现所有这些捆绑技术都非常有趣。 在处理一些用例时&#xff0c;我陷入一种情况&#xff0c;即我只需要一个Interceptor即可在发送到Karaf应用程序下部署的任何捆绑包的每个HTTP请…

听说,高手都用记事本写C语言代码?

坊间传闻高手都喜欢用记事本写代码&#xff0c;那么问题来了&#xff0c;我们以C语言为例&#xff0c;如何用记事本编译运行呢&#xff1f;其实&#xff0c;最简单的方式就是安装GCC编译器&#xff0c;在记事本编写C语言程序&#xff0c;然后再在命令行用GCC编译运行。下面&…

精简指令和复杂指令计算机,CPU精简指令集和复杂指令集的区别

经常看到计算机课程上介绍PowerPC是采用精简指令集的CPU&#xff0c;酷睿CPU是复杂指令集。那么到底精简指令集和复杂指令集有什么区别呢&#xff1f;以下内容摘自百度百科&#xff1a;在计算机指令系统的优化发展过程中&#xff0c;出现过两个截然不同的优化方向&#xff1a;C…

均值差异大但是t检验不显著_T检验原理及介绍

T检验原理及应用介绍一、T检验的应用场景&#xff1a;应用场景&#xff1a;可以用于研究工艺更改前后对于产品质量是否有显著提高&#xff1b;研究不同的热处理温度对于产品性能&#xff0c;晶粒度等是否有明显效果&#xff1b;研究不同的设备或人员对于产品质量的影响是否有差…