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中的yield函数的用法
Apr 03 Python
简单介绍Ruby中的CGI编程
Apr 10 Python
python处理二进制数据的方法
Jun 03 Python
python 实现登录网页的操作方法
May 11 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
python中return的返回和执行实例
Dec 24 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
Python 如何创建一个线程池
Jul 28 Python
python re的findall和finditer的区别详解
Nov 15 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 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分页代码实例
2013/10/24 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
python常见的格式化输出小结
2016/12/15 Python
python使用RNN实现文本分类
2018/05/24 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python对象属性自动更新操作示例
2018/06/15 Python
python绘制多个曲线的折线图
2020/03/23 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
python安装本地whl的实例步骤
2019/10/12 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
PHP面试题及答案二
2015/05/23 面试题
TCP/IP的分层模型
2013/10/27 面试题
计算机毕业生自荐信范文
2014/03/23 职场文书
安全生产目标责任书
2014/04/14 职场文书
仓库管理计划书
2014/05/04 职场文书
2016新年年会主持词
2015/07/06 职场文书
小组组名及励志口号
2015/12/24 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang