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  连接字符串(join %)
Sep 06 Python
python查找第k小元素代码分享
Dec 18 Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python函数式编程
Jul 20 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
python异步Web框架sanic的实现
Apr 27 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
python析构函数用法及注意事项
Jun 22 Python
浅析python中特殊文件和特殊函数
Feb 24 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
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
浅谈php7的重大新特性
2015/10/23 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python实现把数字转换成中文
2015/06/29 Python
python抓取网页中链接的静态图片
2018/01/29 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python 切分数组实例解析
2019/11/07 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
基于Python实现简单学生管理系统
2020/07/24 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
小学教师办公室制度
2014/02/03 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
法律专业自荐信
2014/06/03 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
工作总结与自我评价
2014/09/18 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Python Matplotlib库实现画局部图
2021/11/17 Python
python playwright之元素定位示例详解
2022/07/23 Python