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抓取Discuz!用户名脚本代码
Dec 30 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python中分数的相关使用教程
Mar 30 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
PHP统计代码行数的小代码
Sep 19 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
Python创建简单的神经网络实例讲解
Jan 04 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中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
初学Python实用技巧两则
2014/08/29 Python
python使用cPickle模块序列化实例
2014/09/25 Python
Python中__name__的使用实例
2015/04/14 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
机器学习10大经典算法详解
2017/12/07 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python实现数据写入excel表格
2018/03/25 Python
详解python的四种内置数据结构
2019/03/19 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
Django通过json格式收集主机信息
2020/05/29 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
经典c++面试题四
2015/05/14 面试题
单位提档介绍信
2014/01/17 职场文书
归元寺导游词
2015/02/06 职场文书
钱学森观后感
2015/06/04 职场文书
Spring实现内置监听器
2021/07/09 Java/Android
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle