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中关于使用模块的基础知识
May 24 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python编写Windows Service服务程序
Jan 04 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
python pycharm的安装及其使用
Oct 11 Python
Python pandas如何向excel添加数据
May 22 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 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在各种web服务器的运行模式详解
2013/06/03 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
js计算精度问题小结
2013/04/22 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python新手学习标准库模块命名
2020/05/29 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
如何编写python的daemon程序
2021/01/07 Python
python 制作本地应用搜索工具
2021/02/27 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
日语专业毕业生自荐信
2013/11/11 职场文书
大学生就业意向书范文
2014/04/01 职场文书
个人工作表现评语
2014/04/30 职场文书
成都人事代理协议书
2014/10/25 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Linux中各个目录的作用与内容
2022/06/28 Servers