点击上方的“小小白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中from是什么意思_听说你还在找python中import与from方法?

    这篇文章主要介绍了python中import与from方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.模块& ...

  2. python中乘号可以省略吗_字母之间的乘号为什么可以省略不写?

    字母之间的乘号为什么可以省略不写? 在一次由县教体局组织的市名师送教下乡的活动中, 有一位市名 师上了一节<用字母表示数>的示范课.在课堂上,当所学习的新知 完成之后, 教师问: &quo ...

  3. python中debug有什么用途_史上最方便的Python Debug工具

    最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...

  4. python中led是什么意思_用于检测LED闪光灯的Python库

    很有可能解决这个问题.正如@John Percival Hackworth所说,opencv是解决这个问题的一个好选择.我可以给你一些建议.在拍一张带发光二极管的电路板的照片,因为你知道发光二极管的颜 ...

  5. python中circle是什么意思_啥是佩奇,让 Python 告诉你!

    原标题:啥是佩奇,让 Python 告诉你! 本文转载自公众号 恋习Python 刚刚, 被<啥是佩奇>这支广告片刷屏了. 佩奇明明是个喜剧角色, 却看哭了所有人. ▼ <啥是佩奇& ...

  6. 关于python中lambda函数的描述_【单选题】关于Python的lambda函数,以下选项中描述错误的是 A. 可以使用lambda函数...

    下面关于我国各民族分布的说法,正确的是[ ]A.各民族大杂居.小聚居,相互交错居住B.各民族大聚居.小杂居,相互 我国56各民族中,人口数量居前两位的民族依次是[ ]A.壮族和汉族B.壮族和藏族C.汉 ...

  7. python中eps是什么意思_如何将psfrag与使用Python Matplotlib创建的eps图形一起使用

    完成这项工作的可靠方法 如果所有psfrag选项都失败了,仍然有办法成功.EPS并不像第一眼看到的那样神奇的页面描述格式.在 因此,PS语法有助于我们在封装辅助EPS文件的情况下:%!PS-Adobe ...

  8. 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 ...

  9. python中使用递归实现斐波那契数列

    python中使用递归实现斐波那契数列 python中使用递归实现斐波那契数列 先来了解一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家莱昂纳多·斐波那契(Leo ...

  10. python 中的递归深度限制和重置

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 python 中的递归深度限制和重置 import sys sys.getrecursionlimit() #查看当前递归深度限制 ...

最新文章

  1. Spring Batch –用JavaConfig替换XML作业配置
  2. 算法 - KMP算法(字符串匹配)
  3. QML笔记-自定义控件的2种点击方式(推荐第二种)
  4. Jeecg-Boot上传及下载附件异常处理
  5. python2.7出现的错误
  6. 360 c语言 笔试,奇虎360校招的笔试真题
  7. 自由软件之“父”—Richard. M. Stallman
  8. MariaDB安装教程
  9. 【附源码】计算机毕业设计JAVA家庭记账系统
  10. day 26 学习Linux-01天
  11. 【基于物理的渲染(PBR)白皮书】(三) 迪士尼原则的BRDF与BSDF相关总结
  12. 用 regedit 命令把注册表 .reg 文件导入注册表- -
  13. 香港自由行——写在前言
  14. linu离线安装java1.8
  15. GraphSage:Inductive Representation Learning on Large Graphs
  16. Pycharm放大缩小,快捷键控制
  17. 设计 QQ、微信、微博、Github 等第三方账号登陆
  18. 微软CEO鲍尔默10大经典语录
  19. 【Python】B站博人传评论数据抓取 scrapy
  20. ECSHOP安装流程

热门文章

  1. 推二手车平台搅局,通用汽车能从Carvana手上抢到蛋糕吗?
  2. 编译移植龙芯2K1000平台下的qt-5.13
  3. linux+取消磁盘阵列,【图文教程】Hetzner独立服务器设置/配置/取消Raid磁盘阵列...
  4. 绘制流向地图(Flow Maps)
  5. 我不喜欢等别人,也不喜欢被人等
  6. 掷骰子python代码_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程
  7. 从简历被拒到收割今日头条 offer ,我花了一年时间
  8. 优先编码器 Priority Encoder
  9. DB2基础语法与简单使用
  10. 淮工CTF——misc部分wp