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中常用检测字符串相关函数汇总
Apr 15 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python threading的使用方法解析
Aug 28 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Python-openCV读RGB通道图实例
Jan 17 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
Python上下文管理器Content Manager
Jun 26 Python
Python 可迭代对象 iterable的具体使用
Aug 07 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
php上传、管理照片示例
2006/10/09 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
node.js实现多图片上传实例
2014/06/03 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
python实现八大排序算法(2)
2017/09/14 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python hash每次调用结果不同的原因
2019/11/21 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
优秀毕业自我鉴定
2014/02/15 职场文书
高一新生军训感言
2014/03/02 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
军训新闻稿范文
2015/07/17 职场文书
员工升职自我评价
2019/03/26 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python