python递归函数用法详解


Posted in Python onOctober 26, 2020

上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解。

关于递归:

百度解释:是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。

总结理解:递归就是在函数内部调用自己的函数被称之为递归。

实例演示:

#直接调用自己:def func: print('from func') func
Func
#间接调用自己def foo: print('from foo') bar
def bar: print('from bar') foo
Foo
#递归的实现:def age(n): if n == 1: return 18 return age(n-1)+2
print(age(5))
# age(5)=age(4)+2 第一次进入# age(4)=age(3)+2 第二次进入# age(3)=age(2)+2 第三次进入# age(2)=age(1)+2 第四次进入# age(1)=18 第五次进入,最后判断终止条件
# age(n)=age(n-1)+2 #n>1 递归终止条件# age(1)=18 #n=1 等于终止条件

递归的回溯与递推

递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推。回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯。

# 实例l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15,[16,[17,]],19]]]]]]]
def search(l): for item in l: if type(item) is list: search(item) else: print(item)
search(l)

阶乘实例代码:

def fact(n): if n==1: return 1 return n * fact(n -1)

上面就是一个实现阶层的递归函数,我们来试一试。

>>> fact(1)1>>> fact(5)120>>>fact(100)93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

来看一看计算过程:

===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

斐波那契数列

def fib(n): if n <2: return n else: return fib(n -1) + fib(n -2)

汉诺塔

def hanoti(n,x1,x2,x3): if(n == 1): print('move:',x1,'-->',x3) return hanoti(n-1,x1,x3,x2) print('move:',x1,'-->',x3) hanoti(n-1,x2,x1,x3)

到此这篇关于python递归函数用法详解的文章就介绍到这了,更多相关python递归函数用法介绍内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
python实现斐波那契递归函数的方法
Sep 08 Python
Python3使用requests发闪存的方法
May 11 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python实现两款计算器功能示例
Dec 19 Python
pandas 数据实现行间计算的方法
Jun 08 Python
Python对象转换为json的方法步骤
Apr 25 Python
python3 线性回归验证方法
Jul 09 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
解决Python字典查找报Keyerror的问题
May 26 Python
Python实现LR1文法的完整实例代码
Oct 25 #Python
Python操作word文档插入图片和表格的实例演示
Oct 25 #Python
python时间time模块处理大全
Oct 25 #Python
使用AJAX和Django获取数据的方法实例
Oct 25 #Python
Python Tkinter实例——模拟掷骰子
Oct 24 #Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 #Python
python 下划线的不同用法
Oct 24 #Python
You might like
Snoopy类使用小例子
2008/04/15 PHP
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
js输出列表实现代码
2010/09/12 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
原生js实现放大镜
2017/02/20 Javascript
Vuex简单入门
2017/04/19 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
python list语法学习(带例子)
2013/11/01 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
房屋分割离婚协议书范本
2014/12/01 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Django rest framework如何自定义用户表
2021/06/09 Python
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android