Python学习笔记010——递归函数
1 递归定义
函数直接或间接调用函数本身,则该函数称为递归函数
2 递归特点
Python函数递归调用,会用到栈
– 这里的栈是函数/程序运行时系统为其分配的一段内存区
– 栈具有 后进先出 的特性
– 该段内存区域大小有限,大小跟系统有关
– 该区用来存储局部变量等
– 递归函数,调用时借助这个区域存放中间过程
– 所以递归有层数限制
3 优缺点
优点:把问题简单化,让逻辑调理清晰
缺点:递归是一种运行效率不高的调用方式,消耗很多系统资源;一般的编程语言对递归的层数有一定的限制
4 递归函数的设计
递推阶段:从原问题出发,按照递归的调用方法逐渐推进,从未知到已知,直到终止条件
回归阶段:按照终止条件求出结果,逐层的回归带入原问题
终止条件: 一定要有终止条件 ,并且终止一定出现在函数的内部调用之前
5 实现递归函数
如:计算整数n的阶层
循环:
def fact(n):
r = 1
i = 1
while i <= n:
r = r * i
i = i + 1
return r
a = fact(5)
print(a)
递归:
def fact(n):
if n == 1:
return 1
else:
return n * fact(n - 1)
a = fact(5)
print(a)
5.1计算阶层递归的执行过程解析
fact(5)
1、5 * fact(4) 2、5 * (4 * fact(3)) 3、5 * (4 * (3 * fact(2))) 4、5 * (4 * (3 * (2 * fact(1)))) 5、5 * (4 * (3 * (2 * 1))) 6、5 * (4 * (3 * 2)) 7、5 * (4 * 6) 8、5 * 24 9、120
6 小结
• 使用递归必须有一个终止条件
• 使用递归优点——实现简单,结构清晰
• 理论上递归都可以用循环来实现
• 递归要防止栈溢出,有调用层数限制
Python学习笔记010——递归函数的更多相关文章
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
- python学习笔记(递归函数)
博主看了看递归.说的简单点就是程序里面再调用程序本身,或者是方法里面再调研方法本身.或者是函数里面再调研函数本身 用于什么场景呢,博主这里是父子节点排序,父子节点的查询 直接上代码: #!/usr/b ...
- Python学习笔记010——作用域
1 作用域的分类 全局变量:在文件中所有函数外部创建的变量,整个文件可见 局部变量:在函数.类等内部创建的变量且仅用在函数内部的变量: 函数的形参也是局部变量. 注:所有的变量必须是先创建,再使用. ...
- Python学习笔记010——函数文档字符串
函数文档字符串documentation string (docstring)是在函数开头,用来解释其接口的字符串.简而言之:帮助文档 包含函数的基础信息 包含函数的功能简介 包含每个形参的类型,使用 ...
- Python学习笔记010——形参与实参
在使用中忽略了一个问题,形参有些和实参类似,也不能是“关键字后面含有位置参数”,即“默认形参”后面必须不能含有“位置”形参! def test(a=100,b): print("test&q ...
- Python学习笔记010
倒三角 num2 = int(input("Line:")) while num2 > 0: num1 = num2 while num1 > 0: ...
- Python学习笔记(八)
Python学习笔记(八): 复习回顾 递归函数 内置函数 1. 复习回顾 1. 深浅拷贝 2. 集合 应用: 去重 关系操作:交集,并集,差集,对称差集 操作: 定义 s1 = set('alvin ...
- python学习笔记(二)、字符串操作
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...
- Python学习笔记(二):条件控制语句与循环语句及常用函数的用法
总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...
随机推荐
- 织梦(Dedecms) V5.6 plus/carbuyaction.php 本地文件包含漏洞
漏洞版本: DedeCmsV5.6 漏洞描述: DedeCMS内容管理系统软件采用XML名字空间风格核心模板:模板全部使用文件形式保存,对用户设计模板.网站升级转移均提供很大的便利,健壮的模板标签为站 ...
- 附1 hystrix详述(1)
一.hystrix的作用 控制被依赖服务的延时和失败 防止在复杂系统中的级联失败 可以进行快速失败(不需要等待)和快速恢复(当依赖服务失效后又恢复正常,其对应的线程池会被清理干净,即剩下的都是未使用的 ...
- C/C++/Java 程序计时功能函数
编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...
- 系统运维技巧(三)——利用dd命令临时增加交换分区
有时会遇到内存不够用的情况,可以使用本文提供的方法进行临时增加交换分区. #制作交换分区——得到文件 [root@serv01 linux-2.6.38]# dd if=/dev/zero of=/s ...
- 微信小程序Nginx环境配置
环境配置概述 主要内容: SSL免费证书申请步骤 Nginx HTTPS 配置 TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申 ...
- android.net.Uri 简介 API
android.net.Uri 简介 public abstract class android.net.Uri extends Object implements Parcelable, Compa ...
- 浏览WPF中内置颜色名对应的颜色
- IE8中伪元素动态作用样式不重绘bug记录
前阵子对公司框架的前端优化中,使用了字体图标(iconfont)来做模块的图标集,供用户进行配置选择. 字体图标的有非常好的灵活性和复用性,可以像处理文字一样通过font-size进行大小设置.通过c ...
- MySQL监控、性能分析——工具篇
https://blog.csdn.net/leamonjxl/article/details/6431444 MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性 ...
- Matlab实现:图像边缘提取
1. 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素. Roberts算子 ...