1、递归的基础

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

2、递归斐波那契数列

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. #递归 斐波那契数列
  4. def fab(n1,n2):
  5. if n1 > 10000:
  6. return
  7. print(n1)
  8. temp = n1 + n2
  9. fab(n2,temp)
  10.  
  11. fab(0,1)

3、递归过程返回值分析

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. def f4(n):
  4. if n == 5:
  5. return 200
  6. r = f4(n+1)
  7. return r
  8.  
  9. print(f4(1))

执行过程如下图:

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

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. def fab(n,a1,a2):
  4. if n == 10:
  5. return a1
  6. a3 = a1 + a2
  7. r = fab(n+1,a2,a3)
  8. return r
  9.  
  10. re = fab(1,0,1)
  11. print(re)

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

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

6、二分法查找

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

  1. li = list(range(10000000))
  2. print("开始查找.........")
  3. num = 50000
  4. left = 0
  5. right = len(li)-1
  6. count = 0 #记录找了多少次
  7.  
  8. while left <= right:
  9. count = count + 1
  10. middle = (left + right) // 2
  11. if num > li[middle]:
  12. left = middle + 1
  13. elif num < li[middle]:
  14. right = middle - 1
  15. else:
  16. print(middle)
  17. break
  18. else:
  19. print("没有找到这个数")
  20. print('一共找了%s次' % count)

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

  1. lis = [11, 22, 33, 44, 55, 66, 77, 88, 99]
  2.  
  3. def func(left, right, num, li):
  4. middle = (left + right) // 2
  5. if num > li[middle]:
  6. left = middle + 1
  7. elif num < li[middle]:
  8. right = middle - 1
  9. else:
  10. return middle
  11. re = func(left, right, num, li)
  12. return re
  13.  
  14. result = func(0, len(lis) - 1, 88, lis)
  15. 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. vue 利用intersectionOberver实现全局appear/disappear事件

    搬运自:https://juejin.im/post/5cd10959f265da03a00fe5c6 效果: demo地址: https://codepen.io/deepkolos/pen/OYP ...

  2. java_网络编程之BS(web案例)

    package BsServersocket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; publ ...

  3. mysql数据库字段bigint使用

    Mysql里有个数据类型bigint 在java转换成实体对象时,处理不当容易出现以下异常: java.lang.ClassCastException: java.lang.Long cannot b ...

  4. 创建 linuxrc 文件

    创建 linuxrc,加入如下内容: [arm@localhost my_rootfs]#vi linuxrc #!/bin/sh #挂载/etc 为 ramfs, 并从/mnt/etc 下拷贝文件到 ...

  5. OpenGL键盘交互响应事件

    GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP).在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入.   处理 ...

  6. nodejs实现读取文件

    今天后端同事下班,想让我读取一个文件的内容.我想这个是小忙啊,就立马答应了. 我知道这个是nodejs读取,可是我又想,平时我们都要起一个服务才能够运行node服务器, 比如如下代码 var http ...

  7. Python-数据类型内置方法(2)

    目录 元组(tuple) 内置方法: 字典(dict) 内置方法: 优先掌握: 需要掌握 集合(set) 优先掌握 深浅拷贝 拷贝(赋值) 浅拷贝 深拷贝 总结 存值个数 有序 or 无序 可变 or ...

  8. Duilib入门文档提供下载

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...

  9. LUOGU P2949 [USACO09OPEN]工作调度Work Scheduling (贪心)

    解题思路 明明一道比较简单的贪心结果挂了好几次23333,就是按照时间排序,然后拿一个小根堆维护放进去的,如果时间允许就入队并且记录答案.如果不允许就从堆里拿一个最小的比较. #include< ...

  10. 转-Pycharm中运行Python代码的几种方式

    转自:Pycharm中运行Python代码的几种方式 在pycharm中的Python代码运行会出现各种奇葩的问题,比如,密码输入时不显示或没有提示,给我们带来一些麻烦,下面介绍几种代码运行的几种方式 ...