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 相关文章推荐
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
Python语言描述随机梯度下降法
Jan 04 Python
Python 使用with上下文实现计时功能
Mar 09 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 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
PHP安全编程之加密功能
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
python实现学生管理系统开发
2020/07/24 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
政风行风评议个人心得体会
2014/10/29 职场文书
升学宴学生致辞
2015/07/27 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
浅谈JS的原型和原型链
2021/06/04 Javascript