点击上方的“小小白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递归函数怎么写吗~~相关推荐

  1. python中multiple函数_关于多处理:在Python中将多个参数传递给pool.map()函数

    本问题已经有最佳答案,请猛点这里访问. 我需要一些方法来使用pool.map()中接受多个参数的函数.根据我的理解,pool.map()的目标函数只能有一个iterable作为参数,但是有没有其他参数 ...

  2. python中 1.34e3_Python快速编程入门——第2章 Python基础语法

    第2章 python基础语法 一.基本语法 二.变量和数据类型 三.标识符和关键字 四.简单数值类型 一.基本语法 注释:Python的注释是用# 不像C/C++使用的是//或者/*/.多行注释好像挺 ...

  3. python中until函数_等待应用程序窗口:python中的pywinauto.timings.WaitUntilPasses

    我试图在pywinauto中使用waituntilpasses来给应用程序时间打开一个新窗口.我已使用SWAPY识别窗口详细信息. 为了进行测试,我手动打开了子窗口,因此WaitUntilPasses ...

  4. python中调用音乐_调用咪咕音乐api的python命令行音乐下载器

    说明: 1.调用咪咕音乐api进行音乐下载(暂不支持批量) 2.使用自行安装import的库 效果: 源码: [Python] 纯文本查看 复制代码import requestsimport urll ...

  5. python中排序从小到大_面试官:如何用Python实现三个整数从小到大排序?

    概述 今天主要分享一个三树排序的实例,大家可以自己测试玩一下~ 需求 输入三个整数x,y,z,请把这三个数由小到大输出. 方法一:如果是要练练手就随便找个排序算法实现一下 #usr/bin/pytho ...

  6. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  7. python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...

    神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...

  8. python中获取文件大小_如何在Python中获取文件大小

    python中获取文件大小 We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小. Python中的 ...

  9. python中匹配函数_正则表达式以匹配函数名和Python中的所有参数

    假设我有一个字符串,如下所示:"func(arg1, arg2, arg3, arg4, ..., argn)" 编辑:此函数不是用某种特定语言编写的.它只有这种格式.如果这样做更 ...

  10. python中输入字符串_简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...

最新文章

  1. Python——字符串大小写转化
  2. java接口的定义及使用细节
  3. Java Swing 皮肤
  4. Bootstrap3.1开发的响应式个人简历模板
  5. 简单快捷方法:CAJ 文件转 成PDF文件
  6. xface 远程桌面 无法使用tab键盘
  7. 不同品牌发电机组间的并机知识
  8. 光盘刻录只允许读取不能拷贝_便携易用,读写强劲:ORICO外置刻录光驱体验
  9. 安川机器人如何备份_YASKAWA机器人视觉局域网设置参考
  10. 15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
  11. CSS定位设置实例——盒子的定位
  12. shp格式文件出带审图号的地图
  13. Linux虚拟机中安装vim(超详细)
  14. juk互粉攻略set结构体
  15. stn算子_STN 口袋指南
  16. 限速之令牌桶和漏桶算法
  17. Elasticsearch Ingest-Attachment
  18. 【ospf-vlink虚拟连接】
  19. 对软件项目开发的一点思考
  20. 计算机相关扩展活动战队名字,2020最新战队名字大全

热门文章

  1. 手机web禁止微信调整字体
  2. HashSet、LinkedHashSet、TreeSet
  3. Qt3D学习之键盘交互
  4. 利用iTextSharp组件给PDF文档添加图片水印,文字水印
  5. python中文decode和encode转码
  6. 香港学计算机,香港求学计算机专业集锦
  7. android studio dns问题_Android网络优化篇-从DNS开始
  8. 织梦++高级搜索php,织梦高级搜索页面advancedsearch.php调用自定义字段
  9. RabbitMQ修改默认端口:4369、5672、15672、25672
  10. Python自动化必会技能-Excel文件读取