68.递归
先来两个例子:
1.阶乘

 def Fact(num):result=numfor i in range(1,num):result*=ireturn result>>> Fact(5)120>>> Fact(4)24

2.求幂:

   def Fact(x,num):result=1for i in range(num):result*=xreturn result>>> Fact(2,3)8>>> Fact(4,2)16
这样写看起来有点麻烦,其实用递归写这样的算法是更简洁的。
3.阶乘(递归)
   def Fact(num):if num==1:return 1else:return num*Fact(num-1)>>> Fact(5)120>>> Fact(4)24
4.求幂(递归)
   def Fact(x,num):if num==1:return xelse:return x*Fact(x,num-1)>>> Fact(2,3)8>>> Fact(3,4)81

结论:也许你会认为循环的效率更加的高,不如写循环更好,但是在大多数的情况下,递归的可读性更加的高,而且要高的多。
5.一个很经典的算法,二分查找(每一次查找减半),但是对于这样的二分查找序列是不下降子序列:当找到要查找的元素时,返回元素下标;否则返回 “Don’t find it”.

方法一:循环def mid(array,number,left,right):while left<=right:mid =(left+right)//2if array[mid]==number:return midelif array[mid]>number:right=mid-1else :left=mid+1else:print("Don't find it")

注意:要注意这个elif 和if之间的对齐关系,最后一个else和while对齐,主要是为了输出最后没有查找到待查找元素时返回的提示:

 方法二:(递归)def Midfind(array,number,left,right):if right==left:assert number==array[right]return rightelse:mid=(left+right)//2if number>array[mid]:return Midfind(array,number,mid+1,right)else:return Midfind(array,number,left,mid)>>> array=[1,2,3,4,6,7,8,9]>>> Midfind(array,4,0,len(array))3>>> Midfind(array,5,0,len(array))Traceback (most recent call last):File "<pyshell#76>", line 1, in <module>Midfind(array,5,0,len(array))File "E:/python/收集参数.py", line 10, in Midfindreturn Midfind(array,number,left,mid)File "E:/python/收集参数.py", line 8, in Midfindreturn Midfind(array,number,mid+1,right)File "E:/python/收集参数.py", line 8, in Midfindreturn Midfind(array,number,mid+1,right)File "E:/python/收集参数.py", line 3, in Midfindassert number==array[right]
AssertionError注意:断言:assert-当满足条件时,不报错,当满足条件时,报错。

关于学习Python的一点学习总结(30->递归实例)相关推荐

  1. 关于学习Python的一点学习总结(57->正则表达式及re模块中的一些函数)

    关于这个正则表达式,我本人也是有点不完全懂,还在继续学习中. 97.re 1.正则表达式: 1.通配符:正则表达式可与多个字符串匹配,可使用特殊字符来创建这种正则表达式 例如:正则表达式'.ython ...

  2. 关于学习Python的一点学习总结(54->集合->堆->双端队列)

    集合,堆,双端队列 再谈集合set:集合是由内置类set实现的 >>> set(range(10)){0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 可使用序列(或其他可 ...

  3. 关于学习Python的一点学习总结(2->列表)

    4.列表和元组的主要不同在于,列表是可以修改的,而元组不可以. Python支持一种数据结构的基本概念,名为容器(container).容器基本上就是可包含其 他对象的对象.两种主要的容器是序列(如列 ...

  4. 关于学习Python的一点学习总结(58->匹配对象和编组)

    匹配对象和编组 1.模块re中,查找与模式匹配的子串的函数都在找到时返回MatchObject对象.这种对象包 含与模式匹配的子串的信息,还包含模式的哪部分与子串的哪部分匹配的信息.这些子串部分称 为 ...

  5. 关于学习Python的一点学习总结(52->模块就是程序)

    91.模块就是程序 # hello.py print("Hello, world!") 将其保存在文件hello.py中,这个文件的名称(不包括扩展名.py)将成为模块的名称.这个 ...

  6. 关于学习Python的一点学习总结(47->静态方法和类方法)

    86.静态方法和类方法:静态方法和类方法是这样创建的:将它们分别包装在staticmethod和classmethod类的对象中.静态方法的定义中没有参数self,可直接通过类来调用.类方法的定义中包 ...

  7. 关于学习Python的一点学习总结(41->相关的BIF操作)

    81.一些相关的BIF 1.>>> class BIF:def __init__(self,t):self.t=thasattr(object,name):判断name是否在obje ...

  8. 关于学习Python的一点学习总结(38)

    78.文件: 1.文件的类型:包括ASCII,MIME,.txt等格式. 2.文件的格式类型:(1).MPEG视频:mp4;(2).图片格式:.jpg:(3)powerpoint文档:.ppt; (4 ...

  9. 关于学习Python的一点学习总结(35->关联超类)

    76.调用为关联的超类(继承的类)构造函数 先举个例子: class Bird: def __init__(self): self.hungry = True def eat(self): if se ...

最新文章

  1. linux shell编程时报:bad substitution错误的解决办法
  2. sap 教学视频网址
  3. js设置ajax执行顺序,2018-03-10fiddler替换js、js的ajax方法执行顺序
  4. MIT媒体实验室主任辞去一切职务:拿了爱泼斯坦170万美金,涉及程序违规,麻省理工宣布彻查...
  5. 优质的网站结构能给SEO优化带来哪些好处?
  6. ADO.NET复习总结(4)--访问SqlServer的类
  7. 【JavaSE04】Java中循环语句for,while,do···while-练习
  8. ITK:将2D图像堆叠为3D图像
  9. GO语言基础之method
  10. 设计高效sql一般经验谈
  11. 随笔:web服务器中建立一个小的个人站点
  12. Hibernate之关联映射
  13. python绘制余弦曲线散点图_python中如何用matlibplot画正弦曲线?
  14. php 数值相加_php – 合并2个数组并求值(数值键)
  15. 算法手记 之 数据结构(并查集详解)(POJ1703)
  16. mysql建表语句外键_mysql里面用语句怎么建立表外键的命令
  17. Ubuntu16.04 下安装运行 rovio-slam
  18. 5G+AIoT趋势下,智慧社区的发展机遇与趋势
  19. linux从零基础开始
  20. mongodb用户权限管理配置

热门文章

  1. Vue组件中的data和props属性
  2. TCP服务端程序开发
  3. MySQL数据库自连接查询inner join ... on
  4. MATLAB_no.1:入门作业_histeq():_imhist()_(男孩的三个图,以及文字描述)
  5. 基于灰度共生矩阵(GLCM)的图像纹理分析与提取
  6. 遗传算法求解几何问题
  7. 基于OpenCV的条形码检测
  8. 背包思想计算方案的总数(货币系统)
  9. WCF学习笔记(基于REST规则方式)
  10. Android Studio编写运行测试纯java代码可带main()函数