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重新引入被覆盖的自带function
Jul 16 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
Python的randrange()方法使用教程
May 15 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
python从入门到精通 windows安装python图文教程
May 18 Python
python单例模式的多种实现方法
Jul 26 Python
python django生成迁移文件的实例
Aug 31 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
tensorboard显示空白的解决
Feb 15 Python
python合并多个excel文件的示例
Sep 23 Python
Python 中面向接口编程
May 20 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
医学生自荐信
2013/12/03 职场文书
师范学院教师自荐书
2014/01/31 职场文书
开学典礼策划方案
2014/05/28 职场文书
十周年庆典策划方案
2014/06/03 职场文书
委托书如何写
2014/08/30 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang