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获取文件ssdeep值的方法
Oct 05 Python
Python中常见的数据类型小结
Aug 29 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python OS模块实例详解
Apr 15 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
python tkinter实现屏保程序
Jul 30 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
django queryset相加和筛选教程
May 18 Python
Keras设置以及获取权重的实现
Jun 19 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 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程序效率优化的一些策略小结
2010/07/17 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python操作列表的函数使用代码详解
2017/12/28 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
python中partial()基础用法说明
2018/12/30 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
基于Python实现粒子滤波效果
2020/12/01 Python
django中cookiecutter的使用教程
2020/12/03 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
企业管理部经理岗位职责
2013/12/24 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
元旦促销方案
2014/03/15 职场文书
班级寄语大全
2014/04/10 职场文书
党小组鉴定意见
2015/06/02 职场文书
《搭石》教学反思
2016/02/18 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript