递归

在函数内部,调用函数自身的编程技巧称为递归( recursion)。递归函数结构清晰,很直观的理解计算过程,但也有严重缺点:相对于普通循环而言,递归运行效率较低,经过很多冗余的计算,递归会消耗大量的调用堆栈。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧。每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,递归调用的次数过多,会导致栈溢出。因此,应该尽量用循环代替递归。

举个阶乘的例子,用函数 ca(n) 表示阶乘,ca(n) = n! = 1 * 2 * 3 * 4 * (n-1 ) * n = n * ca(n-1)

defca(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>>> printm>>> 3628800

可以用函数来更加人性化阶乘:

deffactorial(x,y):

m=0if x >0:for n in (x,y+1):

m*=nreturnmprint factorial(1,10)

Python还提供一个 reduce 函数,利用 lambda 匿名函数,一行代码便可以完成阶乘的计算:

print reduce(lambda x,y: x*y, range(1,11))

python迭代计算_Python递归和迭代相关推荐

  1. python递归和循环的区别_Python递归与迭代

    1.递归与迭代: 递归和迭代都是循环的一种.简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结 ...

  2. python找钱_python 递归 找零钱

    首先回答你的问题 count = 1 + coins_changeREC(coin_values, change-value)#1.when reached here, one recursion l ...

  3. Python输出斐波那契数列【递归、迭代】

    Python输出斐波那契数列[递归.迭代] 首先 斐波那契数列的定义是什么? 斐波那契数列指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波那契数列以如下被以递推的方 ...

  4. python判断一个对象是否可迭代_python - 在Python中,如何确定对象是否可迭代? - includeStdio...

    有没有像isiterable?我目前找到的唯一解决方案就是打电话 hasattr(myObj, '__iter__') 但我不确定这是多么的愚蠢. 检查__iter__序列类型的工作,但是它会在例如P ...

  5. python反向迭代器_Python中对象迭代与反迭代的技巧总结

    一.如何实现可迭代对象和迭代器对象? 实际案例 某软件要求从网络抓取各个城市气味信息,并其次显示: 北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ...... 如果一次抓取所 ...

  6. python斐波那契递归_Python递归斐波那契示例

    python斐波那契递归 Good day, learners! In this tutorial we are going to learn about Python Recursion and u ...

  7. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

  8. python画代码-Python教程_Python画Mandelbrot集 代码

    Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...

  9. Python 算法之递归与尾递归,斐波那契数列以及汉诺塔的实现

    文章目录 递归概念 递归要素 递归与迭代的区别 示例一:阶乘 示例二:斐波那契数列 示例三:汉诺塔问题 尾递归 Python 中尾递归的解决方案 递归概念 递归:程序调用自身的编程技巧称为递归( re ...

最新文章

  1. 用C#计算1000以内含1的数字
  2. Nginx开发从入门到精通
  3. 3D脚本 maxscript入门教程(6)
  4. 卸载 linux http
  5. Python萌新笔记
  6. 【Java】函数式编程思想-Lambda表达式
  7. mysql远程连接错误10038--navicat for mysql (10038)
  8. 3D重建传统算法对比深度学习,SFU谭平:更需要的是二者的融合
  9. 浅谈Eclipse dropins插件安装的坑(附m2e的各个版本插件下载)
  10. Xcode9之折叠代码
  11. 安装oracle数据库过程中系统表空间,Oracle数据库安装及配置
  12. 置换矩阵的转置为什么和逆矩阵相等?
  13. 借助科技的力量,让物联网更好的服务鱼虾养殖业
  14. 【BZOJ5470】[FJOI2018]所罗门王的宝藏()
  15. python3日期时间运算_马克的Python学习笔记#数字,日期和时间3
  16. 什么是CDN,使用CDN有什么作用,华为云内容分发网络 CDN助您全站加速
  17. 检测椭圆的长短轴参数
  18. MySQL 8.0初体验
  19. css3 - 图标元素动画效果4 - 动画延迟
  20. websocket连接服务端一直超时并失败

热门文章

  1. 《福布斯》:微软的印度未来
  2. 周鸿祎:谷歌Chrome不是浏览器
  3. 程序员会写诗是怎样的体验
  4. docker容器cpu高问题排查_干货详解:一文教你如何利用阿里开源工具,排查线上CPU居高问题...
  5. TypeError: cannot convert the series to <class ‘float‘>问题解决
  6. 什么是倾斜45度的火山图?
  7. 史上最牛研究生,总结出惠人无数的“十大经验”,并发表于Nature Medicine
  8. 如何在PD17虚拟机上安装CentOS Linux系统
  9. AE一键快速生成MG爆炸图形动画插件:Burst Box for Mac
  10. 如何使用Wondershare Recoverit for Mac从崩溃的 Mac 恢复数据?