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 相关文章推荐
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python装饰器用法示例小结
Feb 11 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
Python中的self用法详解
Aug 06 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python 可视化神器Plotly详解
Dec 26 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
使用PHP编写的SVN类
2013/07/18 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python 数据结构之旋转链表
2017/02/25 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
表扬信格式
2014/01/12 职场文书
工程资料员岗位职责
2014/03/10 职场文书
法人授权委托书
2014/09/16 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年推普周活动总结
2015/03/27 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
消防宣传标语大全
2015/08/03 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书