# 计算方法:人脑复杂,计算机简单
#查找:找数据
#排序
#最短路径
#我们学习的算法都是过去时
#要了解基础的算法,才能创造出更好的算法
#不是所有的事情都能套用现成的方法解决的
# 有些时候会用到学过的算法只是来解决问题
#二分查找算法 必须处理有序的列表
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# def find(l,aim):
# mid_index = len(l) // 2
# if l[mid_index] < aim:
# new_l = l[mid_index + 1:]
# find(new_l,aim)
#
# elif l[mid_index] > aim:
# new_l = l[:mid_index]
# find(new_l,aim)
# else:
# print('get it',mid_index,l[mid_index])
#
# find(l,66) l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# def find(l,aim,start=0,end=None):
# end = len(l) if end is None else end #end len(1) 24
# mid_index = (end - start) // 2 + start #计算中间值 12 +0 =12
# if l[mid_index] < aim: #l[12] < 44 41 <44
# find(l,aim,start =mid_index + 1,end=end) #find(1,44,start=13,end=24)
# elif l[mid_index] > aim:
# find(l,aim,start =start + 1,end=mid_index-1)
# else:
# print('got it',mid_index,aim)
# #第二次
# def find(l,aim,start=0,end=None): #1,44,start=13,end=24
# end = len(l) if end is None else end #end=24
# mid_index = (end - start) // 2 + start #计算中间值 24-13 =11 /2 =5 +13=18
# if l[mid_index] < aim: #l[18] < 44 67 <44
# find(l,aim,start =mid_index + 1,end=end)
# elif l[mid_index] > aim: 67 >44
# find(l,aim,start =start + 1,end=mid_index-1)#find(1,44,start=13,end=17)
# else:
# print('got it',mid_index,aim)
# #第3次
# def find(l,aim,start=0,end=None): #1,44,start=13,end=17
# end = len(l) if end is None else end #end=17
# mid_index = (end - start) // 2 + start #计算中间值 17-13 =4 /2 =2 +13=15
# if l[mid_index] < aim: #l[15] < 44 55 <44
# find(l,aim,start =mid_index + 1,end=end)
# elif l[mid_index] > aim: 55 >44
# find(l,aim,start =start + 1,end=mid_index-1)#find(1,44,start=13,end=14)
# else:
# print('got it',mid_index,aim)
# #第4次
# def find(l,aim,start=0,end=None): #1,44,start=13,end=14
# end = len(l) if end is None else end #end=14
# mid_index = (end - start) // 2 + start #计算中间值 14-13 =1/2 =0 +13=13
# if l[mid_index] < aim: #l[13] < 44 42 <44
# find(l,aim,start =mid_index + 1,end=end)#find(1,44,start=14,end=14)
# elif l[mid_index] > aim: 55 >44
# find(l,aim,start =start + 1,end=mid_index-1)
# else:
# print('got it',mid_index,aim)
#第5次
def find(l,aim,start=0,end=None): #1,44,start=14,end=14
end = len(l) if end is None else end #end=14
if start <= end:
mid_index = (end - start) // 2 + start #计算中间值 14-14 =0/2 =0 +14=14
if l[mid_index] < aim: #l[14] < 44 43<44
return find(l,aim,start =mid_index + 1,end=end)#find(1,44,start=15,end=14)
elif l[mid_index] > aim:
return find(l,aim,start =start + 1,end=mid_index-1)
else:
return mid_index,aim
else:
return 'not get it'
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] ret = find(l,66)
print(ret)

Python9-递归函数-day17的更多相关文章

  1. 递归函数 day17

    一 递归函数 n = 1 金老板 38+2 =40n = 2 alex n+2= 金老板 36+2 = 38n = 3 wusir n+2 = alex wusir 36 def age(n): #n ...

  2. day17递归函数(二分法查找)

    递归函数: 如果函数包含了对其自身的调用,该函数就是递归的: example 1:二分法查找的实现: def find_recursion(l,aim,start=0,end=None): #end不 ...

  3. day17.初识递归函数

    在一个函数调用这个函数本身就是递归函数 递归函数默认深度最大997 n = 0 def func(): global n n += 1 print('hello,world') print(n) fu ...

  4. day17:递归函数

    1,递归函数是一个函数体系,非常的难 2,练习题一 # 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao',' ...

  5. javascript中的递归函数

    正常的递归函数如下: function factorial(num){ ){ ; }else{ ); } } 这个函数表面看起来还ok,但如果我们执行下面代码就会出错. var jenny = fac ...

  6. JS函数相关及递归函数的使用

    JS函数相关及递归函数的使用 通用js程序: function 函数名(参数列表) { 函数体 } 可使用alert()输出,也可用return返回值. alert与return区别: functio ...

  7. python3--函数(函数,全局变量和局部变量,递归函数)

    1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合.函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能, ...

  8. Python之路 day3 递归函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 在函数内部,可以调用其他函数.如果一个函数在内 ...

  9. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

  10. 浅谈-js递归函数

    所谓的递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.递归函数只有在特定的情况下使用 ,比如阶乘问题 下面我们就做一个10以内的阶乘试试看吧: [Ctrl+A 全选 ...

随机推荐

  1. C# 获取当前ip

    1.获取局域网ip IPAddress ipAddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];//获得当前IP地址 string ip=ipAd ...

  2. Excel 通过pl/sql导入到数据库 文本导入器 odbc导入器

     Excel 通过pl/sql导入到数据库 第一种方法:文本导入器 1.准备Excel导入数据   jc.xls 2.把 jc.xls 文件 改为 jc.csv文件 3.在数据库里建一张jc表(FLH ...

  3. jQuery addClass() 源码解读

    addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = ...

  4. toLua学习

    toLua学习通用的过程//开始LuaState lua = new LuaState();lua.Start();--在这个位置插入lua的具体操作--//结束lua.CheckTop();lua. ...

  5. JDK原子类操作

    JDK原子类操作及原理 在JDK5之后,JDK提供了对变量的原子类操作, java.util.concurrent.atomic里都是原子类 原子类的分类 原子更新基本类型 原子更新数组 原子更新抽象 ...

  6. FXP登录Linux报错

    1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...

  7. Nodejs chrome 调试node-inspector

    1.下载扩展: 全局安装 npm install -g node-inspector 2.开启debug调试: node --debug[=port] filename (默认端口5858)node ...

  8. user-select详解

    语法: user-select:none | text | all | element 默认值:text 适用于:除替换元素外的所有元素 继承性:无 动画性:否 计算值:指定值 取值: none: 文 ...

  9. LINUX一网卡多IP设置

    方法1:少量IP手动绑定(这里以绑定IP到eth0为例,其它网卡的话修改相应的文件名即可) 1.复制ifcfg-eth0的网卡配置文件并改名为ifcfg-eth0:0 [root@akinlau /] ...

  10. UVA 10572 Black & White (状压DP)

    题意:有一个n*m的矩阵,其中部分格子已经涂黑,部分涂白,要求为其他格子也上黑/白色,问有多少种涂法可以满足一下要求: (1)任意2*2的子矩阵不可以同色. (2)所有格子必须上色. (3)只能有两个 ...