1、递归的基础

举例说明:老师要班里坐在最后的一排学生要一本书,老师对前面的人说你向最后一排的同学要一本书,那么最前面的人跟坐在第2排的人说,第2排的人跟第3排的人说,当命令传递到最后一排时,最后一排的同学给倒数第2排的人,倒数第2排的人,给倒数第3排的人,直到传递给第1排,第1排的同学把书给老师。

2、递归斐波那契数列

#!usr/bin/env python
# -*- coding:utf-8 -*-
#递归 斐波那契数列
def fab(n1,n2):
if n1 > 10000:
return
print(n1)
temp = n1 + n2
fab(n2,temp) fab(0,1)

3、递归过程返回值分析

#!usr/bin/env python
# -*- coding:utf-8 -*-
def f4(n):
if n == 5:
return 200
r = f4(n+1)
return r print(f4(1))

执行过程如下图:

4、递归求斐波那契数列的第10个值

#!usr/bin/env python
# -*- coding:utf-8 -*-
def fab(n,a1,a2):
if n == 10:
return a1
a3 = a1 + a2
r = fab(n+1,a2,a3)
return r re = fab(1,0,1)
print(re)

5、利用递归读取目录下的所有文件夹和文件

#通过递归将目录下所有的文件及文件夹进行打印
import os
mypath = 'D:\\project\\untitled1' def func(my_path,n):
dirlist = os.listdir(my_path) #读取目录列表
for el in dirlist:
el_path = os.path.join(my_path,el) #连接目录和文件
if os.path.isdir(el_path): #判断是否为目录
print('\t' * n, el)
func(el_path,n+1)
else:
print('\t'*n,el) func(mypath,0)

6、二分法查找

1)二分法查找的条件是:序列有序排序

li = list(range(10000000))
print("开始查找.........")
num = 50000
left = 0
right = len(li)-1
count = 0 #记录找了多少次 while left <= right:
count = count + 1
middle = (left + right) // 2
if num > li[middle]:
left = middle + 1
elif num < li[middle]:
right = middle - 1
else:
print(middle)
break
else:
print("没有找到这个数")
print('一共找了%s次' % count)

2)递归的方式实现二分查找

lis = [11, 22, 33, 44, 55, 66, 77, 88, 99]

def func(left, right, num, li):
middle = (left + right) // 2
if num > li[middle]:
left = middle + 1
elif num < li[middle]:
right = middle - 1
else:
return middle
re = func(left, right, num, li)
return re result = func(0, len(lis) - 1, 88, lis)
print(result)

【python之路23】递归的更多相关文章

  1. python之路——23

    复习 1.类定义 函数--方法--动态属性 必须传self 变量--类属性--静态属性 __init__方法--初始化方法2.实例化 1.使用:对象 = 类() 2.实例和对象没有区别 3.对象调用方 ...

  2. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  3. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  4. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  5. Python之路【第十七篇】:Django之【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  6. Python之路【第十七篇】:Django【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  7. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  8. Python之路,Day17 - 分分钟做个BBS论坛

    Python之路,Day17 - 分分钟做个BBS论坛   本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...

  9. Python之路,Day8 - Socket编程进阶

    Python之路,Day8 - Socket编程进阶   本节内容: Socket语法及相关 SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台 ...

随机推荐

  1. java_缓冲流(文件内容排序)

    /** 案例:诸葛亮出师表文本排序 * 1.使用HashMap集合,k存储每行文本序,v存储文本 * 2.创建字符缓冲输入流,构造方法中绑定字符输入流 * 3.使用字符串缓冲输入流中的方法readLi ...

  2. Arrays.asList()使用的问题

    在java语言中,把数组转换成List集合,有个很方便的方法就是 List<String> list = Arrays.asList("a","b" ...

  3. Jmeter性能测试 入门【转】

    Jmeter性能测试 入门[转] Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter ...

  4. 07.07NOIP模拟赛

    考中 考试时不知道自己在想啥.. 拿到第一题:woc组合数学,第二题:woc组合数学,第三题,woc组合数学. 然后开始认真读题…… 我tm真是闲的... 第一题是15年山东省选题,感觉暴力搜索都没法 ...

  5. Zuul的容错与回退与Zuul的高可用

    容错与回退 复制zuul项目,修改ArtifactId 如zuul-falllback 写Zuul的回退类 @Component public  class ZuulFallBackProvider ...

  6. 扩展IEnumerable<T> ForEach()方法

      相信很多人,在用Linq时,都会困惑为什么IEnumerabel<T>没有ForEach,虽然 我们一样可以这样写,很快读写 foreach(item in items) { Cons ...

  7. 04.如何升级扩展以支持Visual Studio 2019

    更新.vsixmanifest 我们需要对.vsixmanifest文件进行一些更新.首先,我们必须更新支持的VS版本范围 <InstallationTarget> 这是一个版本,支持Vi ...

  8. Spring SpringMVC SpringBoot SpringCloud 注解整理大全

    Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...

  9. mybatis和java一些知识记录

    <where> <if test="userName != null and userName != ''"> and user_name like con ...

  10. [转]C# 委托、事件,lamda表达式

    1. 委托Delegate C#中的Delegate对应于C中的指针,但是又有所不同C中的指针既可以指向方法,又可以指向变量,并且可以进行类型转换, C中的指针实际上就是内存地址变量,他是可以直接操作 ...