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读写Redis数据库操作示例
Mar 18 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python内置模块turtle绘图详解
Dec 09 Python
python 获取图片分辨率的方法
Jan 08 Python
Pandas分组与排序的实现
Jul 23 Python
python模块常用用法实例详解
Oct 17 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
django 模型中的计算字段实例
May 19 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
Python快速优雅的批量修改Word文档样式
May 20 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静态新闻列表自动生成代码
2007/06/14 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python中的filter()函数的用法
2015/04/27 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
优秀党员转正的自我评价
2013/10/06 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
个人自查自纠材料
2014/10/14 职场文书
见义勇为事迹材料
2014/12/24 职场文书
2015年班干部工作总结
2015/04/29 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs