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之eval()函数危险性浅析
Jul 03 Python
Python中List.index()方法的使用教程
May 20 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python 数据结构之旋转链表
Feb 25 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Tensorflow 多线程设置方式
Feb 06 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
python 基于opencv去除图片阴影
Jan 26 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
js 分栏效果实现代码
2009/08/29 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python写日志封装类实例
2015/06/28 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
详解Python自建logging模块
2018/01/29 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
党员创先争优公开承诺书
2014/03/28 职场文书
项目投资意向书
2014/04/01 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
培训班开班主持词
2015/07/02 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书