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 pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
python生成随机mac地址的方法
Mar 16 Python
Python中获取对象信息的方法
Apr 27 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
PyQt5每天必学之布局管理
Apr 19 Python
利用python画出折线图
Jul 26 Python
Python装饰器模式定义与用法分析
Aug 06 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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中操作Excel实例代码
2010/04/29 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
JavaScript模拟push
2016/03/06 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
Vue框架之goods组件开发详解
2018/01/25 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
python的id()函数介绍
2013/02/10 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
python获取Linux发行版名称
2019/08/30 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
PyQt5实现登录页面
2020/05/30 Python
python requests库的使用
2021/01/06 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
学校团代会开幕词
2016/03/04 职场文书
Python基础知识之变量的详解
2021/04/14 Python
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记