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的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
python实现关键词提取的示例讲解
Apr 28 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python将回车作为输入内容的实例
Jun 23 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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 简单日历实现代码
2009/10/28 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
python中的字典使用分享
2016/07/31 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
python语言是免费还是收费的?
2020/06/15 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
C有"按引用传递"吗
2016/09/06 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
化学教师自荐信范文
2013/12/28 职场文书
经典演讲稿汇总
2014/05/19 职场文书
社区护士演讲稿
2014/08/27 职场文书
催款函怎么写
2015/06/24 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
详解java如何集成swagger组件
2021/06/21 Java/Android