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 相关文章推荐
Python os模块介绍
Nov 30 Python
在Python中使用模块的教程
Apr 27 Python
python+django加载静态网页模板解析
Dec 12 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
Python的垃圾回收机制详解
Aug 28 Python
python中with用法讲解
Feb 07 Python
Python如何输出整数
Jun 07 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Python 必须了解的5种高级特征
Sep 10 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
JavaScript 数组详解
2013/10/10 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Django logging配置及使用详解
2019/07/23 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
董事长助理岗位职责
2014/02/18 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫