Python语言学习之Python递归函数
小职 2021-03-24 来源 :Go语言进阶学习 阅读 640 评论 0

摘要:本文基于Python基础,主要介绍了Python语言学习之Python递归函数,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

本文基于Python基础,主要介绍了Python语言学习之Python递归函数,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

Python语言学习之Python递归函数

一、什么是递归函数?

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

 

二、函数的递归调用原理

实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。

 

栈内存的大小是限制递归深度的重要因素

 

三、案例分析

1.求阶乘

 

计算阶乘n! = 1 x 2 x 3 x … x n,

 

可以用函数fact(n)表示。

 

fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x n

fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

 

于是,fact(n)用递归的方式写出来就是:

 

def fact(n):

    if n == 1:

        return 1

    return n * fact(n - 1)

如果计算fact(6),可以根据函数定义看到计算过程如下:

 

def fac(n):

    if n==1:

        return 1

    else:

        res=n*fac(n-1)

        return  res

 

print(fac(6))

运行结果:

 Python语言学习之Python递归函数

 

 

2.斐波拉契级数

 

有这样一个数列:1,1,2,3,5,8,13,21,34…。其第一元素和第二个元素等于 1,其他元素等于其前面两个元素的和。

 

例:

 

def fab(n):  # 定义斐波拉契级数

    if n in [1, 2]:  # 如果n=1或者2

      return 1

    return fab(n - 1) + fab(n - 2)  # n>2

 

 

print(fab(1))  # 斐波拉契级数的第一个元素

 

print(fab(2))  # 斐波拉契级数的第二个元素

 

print(fab(8))  # 斐波拉契级数的第8个元素

print(fab(13))  # 斐波拉契级数的第9个元素    

运行结果:

 Python语言学习之Python递归函数

 

 

3.递归函数的优点

 

定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

 

递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归的深度太大,会导致栈溢出。以上面的阶乘为例,如果计算 100000 的阶乘,在一般机器上都会出现栈溢出的问题。

 

print(fac(10000))

如下所示:

 Python语言学习之Python递归函数

 

 

四、总结

本文基于Python基础。Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出。介绍了在使用递归函数的优缺点,优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。

 

在实际案例中,针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环,进行详细的讲解。

 

使用Python语言,希望能够帮助你更好的学习。


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取学习教程,开发工具,代码大全,参考书籍

Python语言学习之Python递归函数

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程