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 strip()函数 介绍
May 24 Python
Python中replace方法实例分析
Aug 20 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
Python Grid使用和布局详解
Jun 30 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
Matplotlib绘制混淆矩阵的实现
May 27 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简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
canvas绘制多边形
2017/02/24 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
对python中执行DOS命令的3种方法总结
2018/05/12 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
省优秀教师事迹材料
2014/01/30 职场文书
上班打牌检讨书
2014/02/07 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
安全生产承诺书
2014/03/26 职场文书
信访工作汇报材料
2014/10/27 职场文书
运动会开幕式致辞
2015/07/29 职场文书
勤俭节约主题班会
2015/08/13 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis