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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python字典get()方法用法分析
Apr 17 Python
python妹子图简单爬虫实例
Jul 07 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
python爬虫爬取网页表格数据
Mar 07 Python
django用户登录和注销的实现方法
Jul 16 Python
python如何创建TCP服务端和客户端
Aug 26 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
python中def是做什么的
Jun 10 Python
详解python的xlwings库读写excel操作总结
Feb 26 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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+Html+缓存
2006/12/20 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
js实现内置计时器
2019/12/16 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python 字典dict使用介绍
2014/11/30 Python
python3简单实现微信爬虫
2015/04/09 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
python解析基于xml格式的日志文件
2017/02/25 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
python发送告警邮件脚本
2018/09/17 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
运动会通讯稿100字
2014/01/31 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
项目负责人岗位职责
2015/02/15 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
MySql开发之自动同步表结构
2021/05/28 MySQL
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL