python中的递归怎么写_《Python入门08》你知道Python递归函数怎么写吗~~
点击上方的“小小白AI”,选择“关注”
重磅知识,第一时间送达
前言
直入主题~~~
1、什么是递归函数
前面深入介绍了如何创建和调用函数。你知道,函数可调用其他函数,但可能让你感到惊讶的是,函数还可调用自己。如果你以前没有遇到这种情况,可能想知道递归是什么意思。简单地说,递归意味着引用(这里是调用)自身。
2、python递归函数
下面是一个递归式函数定义:
def recursion():
return recursion()
这个定义显然什么都没有做,与刚才的“递归”定义一样傻。如果你运行它,结果将如何呢?你将发现运行一段时间后,这个程序崩溃了(引发异常)。从理论上说,这个程序将不断运行下去,但每次调用函数时,都将消耗一些内存。因此函数调用次数达到一定的程度(且之前的函数调用未返回)后,将耗尽所有的内存空间,导致程序终止并显示错误消息“超过大递归深度”
你想要的是能对你有所帮助的递归函 数,这样的递归函数通常包含下面两部分。
基线条件(针对小的问题):满足这种条件时函数将直接返回一个值。
递归条件:包含一个或多个调用,这些调用旨在解决问题的一部分。
这里的关键是,通过将问题分解为较小的部分,可避免递归没完没了,因为问题终将被分解成基线条件可以解决的小问题。
3、python递归函数
那么如何让函数调用自身呢?这没有看起来那么难懂。前面说过,每次调用函数时,都将为此创建一个新的命名空间。这意味着函数调用自身时,是两个不同的函数[更准确地说,是不同版本(即命名空间不同)的同一个函数]在交流。
经典案例1,计算数字n的阶乘。n的阶乘为n × (n-1)× (n-2) ×… × 1,在数学领域的用途非常广泛。
可使用循环。这种实现可行,而且直截了当。
deffactorial(n):
result = n
for i in range(1, n):
result *= i
return result
下面来考虑如何使用函数来实现这个定义。理解这个定义后,实现起来其实非常简单。 def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n -1)
这是前述定义的直接实现,只是别忘了函数调用factorial(n)和factorial(n–1)是不同的 实体。
经典案例2、计算一个数幂,就像内置函数pow和运算符**所做的那样。要定义一个数字的整数次幂,有多种方式,但先来看一个简单的定义:power(x, n)(x的n次幂)是将数字x自乘n - 1次的结果,即将n个x相乘的结果。换而言之,power(2, 3)是2自乘两次的结果,即2 × 2 × 2 = 8。
这实现起来很容易。
def power(x, n):
result = 1
for i in range(n):
result *= x
return result 这是一个非常简单的小型函数,但也可将定义修改成递归式的。
对于任何数字x,power(x, 0)都为1。n>0时,power(x, n)为power(x,n-1)与x的乘积。这种定义提供的结果与更简单的迭代定义完全相同。理解定义是难的,而实现起来很容易。
def power(x, n):
if n == 0:
return1
else:
return x* power(x, n - 1)
4、为什么要使用递归函数
大多数情况下,使用循环的效率可能更高。然而,在很多情况下,使用递归的可读性更高,且有时要高得多,在你理解了函数的递归式定义时尤其如此。另外,虽然你完全能够避免编写递归函数,但作为程序员,你必须能够读懂其他人编写的递归算法和函数。always remember you should coding~~~
参考文献:
[1]Beginning Python From Novice to Professional (Third Edition),
Magnus Lie Hetland.
希望上述内容能够帮助到正在学习的你~
▲长按关注我们
重磅知识,第一时间送达
python中的递归怎么写_《Python入门08》你知道Python递归函数怎么写吗~~相关推荐
- python中from是什么意思_听说你还在找python中import与from方法?
这篇文章主要介绍了python中import与from方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.模块& ...
- python中乘号可以省略吗_字母之间的乘号为什么可以省略不写?
字母之间的乘号为什么可以省略不写? 在一次由县教体局组织的市名师送教下乡的活动中, 有一位市名 师上了一节<用字母表示数>的示范课.在课堂上,当所学习的新知 完成之后, 教师问: &quo ...
- python中debug有什么用途_史上最方便的Python Debug工具
最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...
- python中led是什么意思_用于检测LED闪光灯的Python库
很有可能解决这个问题.正如@John Percival Hackworth所说,opencv是解决这个问题的一个好选择.我可以给你一些建议.在拍一张带发光二极管的电路板的照片,因为你知道发光二极管的颜 ...
- python中circle是什么意思_啥是佩奇,让 Python 告诉你!
原标题:啥是佩奇,让 Python 告诉你! 本文转载自公众号 恋习Python 刚刚, 被<啥是佩奇>这支广告片刷屏了. 佩奇明明是个喜剧角色, 却看哭了所有人. ▼ <啥是佩奇& ...
- 关于python中lambda函数的描述_【单选题】关于Python的lambda函数,以下选项中描述错误的是
A. 可以使用lambda函数...
下面关于我国各民族分布的说法,正确的是[ ]A.各民族大杂居.小聚居,相互交错居住B.各民族大聚居.小杂居,相互 我国56各民族中,人口数量居前两位的民族依次是[ ]A.壮族和汉族B.壮族和藏族C.汉 ...
- python中eps是什么意思_如何将psfrag与使用Python Matplotlib创建的eps图形一起使用
完成这项工作的可靠方法 如果所有psfrag选项都失败了,仍然有办法成功.EPS并不像第一眼看到的那样神奇的页面描述格式.在 因此,PS语法有助于我们在封装辅助EPS文件的情况下:%!PS-Adobe ...
- python 正则表达式 前瞻_我应该如何在python中编写这个正则表达式(How should I write this regex in python)...
我应该如何在python中编写这个正则表达式(How should I write this regex in python) 我有字符串. st = "12345 hai how r u ...
- python中使用递归实现斐波那契数列
python中使用递归实现斐波那契数列 python中使用递归实现斐波那契数列 先来了解一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家莱昂纳多·斐波那契(Leo ...
- python 中的递归深度限制和重置
我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 python 中的递归深度限制和重置 import sys sys.getrecursionlimit() #查看当前递归深度限制 ...
最新文章
- Spring Batch –用JavaConfig替换XML作业配置
- 算法 - KMP算法(字符串匹配)
- QML笔记-自定义控件的2种点击方式(推荐第二种)
- Jeecg-Boot上传及下载附件异常处理
- python2.7出现的错误
- 360 c语言 笔试,奇虎360校招的笔试真题
- 自由软件之“父”—Richard. M. Stallman
- MariaDB安装教程
- 【附源码】计算机毕业设计JAVA家庭记账系统
- day 26 学习Linux-01天
- 【基于物理的渲染(PBR)白皮书】(三) 迪士尼原则的BRDF与BSDF相关总结
- 用 regedit 命令把注册表 .reg 文件导入注册表- -
- 香港自由行——写在前言
- linu离线安装java1.8
- GraphSage:Inductive Representation Learning on Large Graphs
- Pycharm放大缩小,快捷键控制
- 设计 QQ、微信、微博、Github 等第三方账号登陆
- 微软CEO鲍尔默10大经典语录
- 【Python】B站博人传评论数据抓取 scrapy
- ECSHOP安装流程
热门文章
- 推二手车平台搅局,通用汽车能从Carvana手上抢到蛋糕吗?
- 编译移植龙芯2K1000平台下的qt-5.13
- linux+取消磁盘阵列,【图文教程】Hetzner独立服务器设置/配置/取消Raid磁盘阵列...
- 绘制流向地图(Flow Maps)
- 我不喜欢等别人,也不喜欢被人等
- 掷骰子python代码_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程
- 从简历被拒到收割今日头条 offer ,我花了一年时间
- 优先编码器 Priority Encoder
- DB2基础语法与简单使用
- 淮工CTF——misc部分wp