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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
详解python进行mp3格式判断
Dec 23 Python
Python中正则表达式详解
May 17 Python
python实现单向链表详解
Feb 08 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
python集合能干吗
Jul 19 Python
python 调整图片亮度的示例
Dec 03 Python
详解Python常用的魔法方法
Jun 03 Python
Python超详细分步解析随机漫步
Mar 17 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写的简易聊天室代码
2011/06/04 PHP
PHP的全局错误处理详解
2016/04/25 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
js实现旋转木马效果
2017/03/17 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
使用python实现链表操作
2018/01/26 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
详解Python 函数如何重载?
2019/04/23 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
25道Java面试题集合
2013/05/21 面试题
高中同学聚会邀请函
2014/01/11 职场文书
小班开学寄语
2014/04/04 职场文书
授权委托书怎么写
2014/09/25 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
工作检讨书怎么写
2015/01/23 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL