# 计算方法:人脑复杂,计算机简单
#查找:找数据
#排序
#最短路径
#我们学习的算法都是过去时
#要了解基础的算法,才能创造出更好的算法
#不是所有的事情都能套用现成的方法解决的
# 有些时候会用到学过的算法只是来解决问题
#二分查找算法 必须处理有序的列表
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. django_view操作数据库

    1 create def add_area(request): area = Area.objects.create(name='commom',description='a commom area' ...

  2. asyncio模块

    asyncio模块   这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念. asyncio 是干什么的? 异步网络操作 并发 协程 python3 ...

  3. Codeforces 1131G(dp)

    传送门 与Codeforces1107G一起食用 思路 想到要用dp--然后常规地设dp[i]为推倒前i个牌的最小花费 有两种情况:一是当前这个推,二是不推而被别人推.对于第一种,需要找到这个左推(因 ...

  4. 牛客练习赛42D(性质、数学)

    题目传送 就像题解所说的,写几个可以发现有分成四段的性质:第一段是从n开始往下贪,第二段是个数字,第三段……卧槽好吧真难描述. 然后发现这个数据量可达1e9,所以考虑“二分确定序列+数学计算”的方式解 ...

  5. hdu6311( 2018 Multi-University Training Contest 2)

    bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6311 从dls思路中,我整理一下自己的思路: 1.首先也是建图 2.建图结束后,一个df ...

  6. 洛谷 P2376 [USACO09OCT]津贴Allowance

    https://www.luogu.org/problemnew/show/P2376 看了题解做的,根本不会贪心.. #include<cstdio> #include<algor ...

  7. 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」

    前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...

  8. MVC验证注解(不包含自定义验证)

  9. [转](不理想)Ubuntu下更改主显示器

    参考链接:http://www.cnblogs.com/feng_013/archive/2012/03/05/2380111.html 查看显示器信息: fdm@fdm-OptiPlex-780:~ ...

  10. IDEA 启用/禁用 Run Dashboard

    一.启用 方式一: 创建/打开一个SpringBoot项目[或者点击Run --> Edit Configurations 添加 Spring Boot 类型的项目配置:或者如图在红框处添加配置 ...