一.递归

  1.递归就是自己调用自己

def fn(n):
  print(n)
fn(n+1)
fn(1) #递归深度官方1000 一般都递归到998 

  2.树形结构的遍历

import os

def fn(lujing, n):
lst = os.listdir(lujing) # 打开文件夹,列出文件内所有文件名
for i in lst: # 一个一个拿到文件名字
path = os.path.join(lujing, i) # 还原文件路径
if os.path.isdir(path): # 判断是不是文件夹
print("\t" * n, i)
fn(path, n + 1) # 递归,再一次遍历文件夹内的文件
else:
print("\t" * n, i) fn("f:/", 0)

  3.递归的入口(参数)   和    出口(return)

    找准入口和出口

二.二分法

  掐头去尾取中间

  查找效率非常的高

 1.普通的二分法 

lst = [1,3,5,7,12,36,68,79]
num = int(input("请输入你要查找的数:"))
left = 0
right = len(lst) - 1 # 索引就是长度-1 while left <= right:
mid = (left + right) // 2 # 取中间的数的索引
if lst[mid] > num: #当num小于中间值的时候就把右边的截掉
right = mid - 1
elif lst[mid] < num: # 当num大于中间值的时候就把左边的截掉
left = mid + 1
else:
print("找到了")
break
else:
print("没找到")

2.递归二分法

def fn(n, lst, left, right):
while left <= right:
mid = (left + right) // 2
if lst[mid] > n:
right = mid - 1
return fn(n,lst,left ,right) # 递归如果有返回值,所有调用的地方必须写return
elif lst[mid] < n:
left = mid + 1
return fn(n,lst,left, right)
else:
print("找到了")
return mid else:
print("没有找到")
return -1 n = int(input("请输入你要查找的数:"))
print(fn(n, lst,0, len(lst)-1))

三.拓展:

最快的查找法(在python中比较麻烦,其他语言快,思想可取)

lst = [1,3,55,98,37,41,2,5,1,4]
new_list = []
for i in range(max(lst)+1): #找到数据中的最大值并取到最大值个数+1的索引 因为有0
new_list.append(i)
new_list[i] = 0 # 意思是弄最大值+1个空格子 for c in lst:
new_list[c] = 1 # 把自身的值 放在对应索引的格子里 n = int(input("请输入你要查找的数:")) if new_list[n] == 1: #格子里有东西就是找到了
print("找到了")
else:
print("没有找到")

  

python递归和二分法的更多相关文章

  1. python 递归和二分法

    一 内置函数 1. revserd 翻转,返回的是迭代器 # 将 s 倒置 s = '不是上海自来水来自海上' # 方法一 print(s[::-1]) # 方法二 s1 = reversed(s) ...

  2. python之匿名函数、递归与二分法

    一.匿名函数 什么是匿名函数? 顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧?   def func(): #正常函数声明 pass prin ...

  3. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  4. python递归 及 面向对象初识及编程思想

    递归 及 面向对象初识及编程思想   一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...

  5. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  6. Python递归_打印节点信息

    Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

  7. PYTHON-匿名函数,递归与二分法,面向过程编程-练习

    # 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

  8. PYTHON-匿名函数,递归与二分法,面向过程编程

    """匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

  9. Python递归实现汉诺塔

    Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->' ...

随机推荐

  1. AttributeError: 'dict' object has no attribute 'iteritems'

    在python3.6中运行 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse= ...

  2. 【转】chrome devtools protocol——Web 性能自动化

    前言 在测试Web页面加载时间时,可能会是这样的: 打开chrome浏览器. 按F12打开开发者工具. 在浏览器上打开要测试的页面 查看开发者工具中Network面板的页面性能数据并记录 或者在开发者 ...

  3. 23【notepad++】修改背景颜色

    notepad++是一款功能丰富的编辑器,运行在windows平台上的编辑工具. 但它默认设置是白色背景,黑色文字,长时间看很刺眼.那么怎么设定成为暗色背景,亮色文字呢? 点击,设置->语言格式 ...

  4. Wannafly挑战赛14 C.可达性(tarjan缩点)

    题目描述 给出一个 0 ≤ N ≤ 105 点数.0 ≤ M ≤ 105 边数的有向图, 输出一个尽可能小的点集,使得从这些点出发能够到达任意一点,如果有多个这样的集合,输出这些集合升序排序后字典序最 ...

  5. apache开启gzip压缩

    1.在httpd.conf中去掉下面的#号 LoadModule headers_module modules/mod_headers.so LoadModule deflate_module mod ...

  6. LIS LCS 最长上升子序列 最长公共子序列 ...

    最长上升子序列,问题定义:http://blog.csdn.net/chenwenshi/article/details/6027086 代码: public static void getData( ...

  7. 使用SQL语句创建数据库2——创建多个数据库文件和多个日志文件

    在matser数据库下新建查询,输入的命令如下: USE master GOCREATE DATABASE E_MarketON PRIMARY--主文件组( NAME ='E_Market_data ...

  8. MSDos

    一.简介   二.源码 http://www.computerhistory.org/atchm/microsoft-research-license-agreement-msdos-v1-1-v2- ...

  9. CSS学习总结3:CSS定位

    CSS 定位机制 CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 一.普通流 除非专门指定,否则所有框都在普通流中定位.普通流中元素框的位置由元素在(X)HTML中的位置决定.块级元素从上到下 ...

  10. 5O - 产生冠军

    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C. 如果A打败了B,B又打败了 ...