Python递归和迭代
2024-08-25 02:33:26
递归
在函数内部,调用函数自身的编程技巧称为递归( recursion)。递归函数结构清晰,很直观的理解计算过程,但也有严重缺点:相对于普通循环而言,递归运行效率较低,经过很多冗余的计算,递归会消耗大量的调用堆栈。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧。每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,递归调用的次数过多,会导致栈溢出。因此,应该尽量用循环代替递归。
举个阶乘的例子,用函数 ca(n) 表示阶乘,ca(n) = n! = 1 * 2 * 3 * 4 * (n-1 ) * n = n * ca(n-1)
def ca(n):
if n == 1:
return 1
return n*ca(n-1)
函数的计算过程是这样的:
(ca(5)) (4 * ca(5)) (3 * (4 * ca(5))) (2 * (3 * (4 * ca(5)))) (1 * (2 * (3 * (4 * (5)))))
迭代
利用 for 循环来遍历一个列表(list)或元组(tuple),将值依次取出,这种方法我们称为迭代。
for x in range(10):
print x
我们可以用 for 循环类计算阶乘:
m = 1
for x in range(1,10):
m *= x
>>> print m
>>> 3628800
可以用函数来更加人性化阶乘:
def factorial(x,y):
m = 0
if x > 0:
for n in (x,y+1):
m *= n
return m
print factorial(1,10)
Python还提供一个 reduce 函数,利用 lambda 匿名函数,一行代码便可以完成阶乘的计算:
print reduce(lambda x,y: x*y, range(1,11))
最新文章
- 一个简单的MySql数据库连接池的实现
- codeforces mysterious present 最长上升子序列+倒序打印路径
- jdk新特性
- pupper基线加固
- fedora SSH
- java面试32问
- 关于dfs+剪枝第一篇:hdu1010
- PCA主成份分析
- JavaScript(第十五天)【匿名函数和闭包】
- (light oj 1102) Problem Makes Problem (组合数 + 乘法逆元)
- mysqldump命令使用
- Libsvm Java
- py-faster-rcnn
- windows开启powershell在此系统中禁止执行脚本
- 黄聪:超实用的PHPExcel[导入][导出]实现方法总结
- div居中的几种方式
- Docker for Windows(一)下载与安装
- CSUOJ 1900 锋芒不露
- laravel 使用验证码
- Word Search, 在矩阵中寻找字符串,回溯算法
热门文章
- Spring Boot与Micronaut性能比较
- Linux安装程序Anaconda分析(续)
- 面向对象五大原则_1.单一职责原则&;amp;2.里氏替换原则
- VUE 之 JS指令
- liberOJ #6173. Samjia 和矩阵 hash+后缀数组
- MIPS 指令集将在近期开源,RISC-V 阵营慌吗?
- Window XP安装Ubuntu14.04实现Samba文件共享
- HDU1495 非常可乐 —— BFS + 模拟
- js截取小数点后面2位
- [Selenium] 如何使ChromeDriver 每次启动的端口不会随机变化