python 递归相关知识总结


Posted in Python onMarch 03, 2021

听到递归总觉得挺高大上的,为什么呢?因为对其陌生,那么今天就来一文记住递归到底是个啥。

不过先别急,一起来看一个问题:求10的阶乘(10!)。

求x的阶乘,其实就是从1开始依次乘到x。那么10的阶乘就是 1*2*3*4*5*6*7*8*9*10

一、非递归方式求阶乘

假如,我们在没接触过递归的情况下,如何去解决这样的问题呢?

最简单粗暴的方式 直接print(1*2*3*4*5*6*7*8*9*10)出结果就行了,结果是3628800。

但是这种方式显然不是我们想要的,那么可以试试用for循环的方式来解决。

def factorial(n):
 """
 n 就是要求的阶乘的数字
 """
 result = n
 for i in range(1, n):
  result *= i

 return result

if __name__ == '__main__':
 print(factorial(10))

二、递归方式求阶乘

1. 什么是递归?

相信大家一定都听过这么一个故事:

从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
  从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
    从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
      ...

其实这种就是递归,说白了,就是自己去引用自己。
那么,递归用在函数中,就可以是这样的:

def factorial():
 factorial() 

if __name__ == '__main__':
 factorial()

在调用函数factorial的时候 在函数中又继续调用factorial,跟上面的故事一样,就可以无穷无尽的递归下去,
直到讲故事的老和尚累晕,以及电脑的内存溢出宕机。

但是,重要的一点,递归只是解决问题的一种方式而已,比如上面的求阶乘,我用for循环一样解决。

2. 递归解决阶乘

如果要用递归解决上面的阶乘问题,可以再进一步了解下递归的整体思想。

递归的整体思想就是,将一个大问题分解成一个个的小问题,直到问题没有办法再继续分解,于是,再去解决问题。
那么,递归式函数就要满足2个条件:

  • 基线条件:问题可以被分解为的最小问题,当满足基线条件时候,递归不再进行
  • 递归条件:继续分解问题

可以用这个思想来尝试用递归的方式解决阶乘的问题。

10! = 10 * 9! # 10的阶乘其实可以看做是10 * 9的阶乘
9! = 9 * 8!  # 9的阶乘可以看做是9 * 8的阶乘
8! = 8 * 7!
...
2! = 2 * 1!
1! = 1

可以看到,最后分解到1的时候就不可再继续分解了,那么1就是基线条件了。

def factorial(n):
 # 基线条件,当满足时,则不再递归
 if n == 1:
  return 1

 # 递归条件,当n不等于1时,继续递归
 return n * factorial(n - 1)

if __name__ == '__main__':
 print(factorial(10))

三、总结

  • 递归:只是解决问题的一种方式,不一定非要用
  • 递归式函数:就是函数自己调用自己
  • 递归的2个条件:基线条件(满足则不再递归)、递归条件(满足则基线递归)
  • 递归跟循环类似:基本可以互相替代
  • 循环编写起来比较容易,阅读起来比较难。递归编写起来比较难,但是阅读容易

以上就是python 递归相关知识总结的详细内容,更多关于python 递归的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python分析nignx访问日志脚本分享
Feb 26 Python
分享Python字符串关键点
Dec 13 Python
详解Python函数作用域的LEGB顺序
May 14 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
Django如何将URL映射到视图
Jul 29 Python
python join方法使用详解
Jul 30 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 #Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 #Python
神经网络训练采用gpu设置的方式
Mar 03 #Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 #Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 #Python
python上下文管理的使用场景实例讲解
Mar 03 #Python
pip install命令安装扩展库整理
Mar 02 #Python
You might like
php 在线打包_支持子目录
2008/06/28 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
python操作MongoDB基础知识
2013/11/01 Python
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
python中round函数保留两位小数的方法
2020/12/04 Python
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
村官工作鉴定评语
2014/01/27 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
红色故事汇观后感
2015/06/18 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python