#递归函数#:   自己调用自己
# def func1():
#     print(666)
#     func1()
# func1()
# import sys
# sys.setrecursionlimit(100000)

# 默认最大递归深度 998
count = 0
def func1(n):n += 1print(n)func1(n)
func1(count)

     PS  太白 23 岁, 日天比太白大两岁, wusir比日天大两岁, alex比wusir大两岁 求出alex的年纪
# def age(n):
#     if n == 1:
#         return 23
#     else:
#         return age(n-1) + 2
#
# print(age(4)) # 23 + 2 + 2 + 2

分解步骤:

"""
def age(4):if n == 1:return 23else:return age(n-1) + 2        age(4) =  age(3) + 2ret = age(4)def age(3):if n == 1:return 23else:return age(n-1) + 2        age(3) = age(2) + 2def age(2):if n == 1:return 23else:return age(1) + 2          age(2) = age(1) + 2def age(1):if n == 1:return 23                   age(1) = 23else:return age(1) + 2          """

# 算法:   用代码写的计算方式。#         二分查找是最简单的算法,比较经典的算法。#   数字序列,有序,不重复。
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]在此列表找到 66 的索引 

第一种方法 
# print(l.index(66))

   第二种方法

# count = 0
# for i in l:
#     if i == 66:
#         print(count)
#     count += 1
# for i in range(len(l)):
#     if l[i] == 47:
#         print(i)
#         break
#
# else:
#     print('找不到....')

  第三种方法

   思路 :

    
  目标值:aim = 66  寻找中间索引: min_index = len(l) // 2  aim 与 中间索引对应的值进行比较    aim > l[min_index]:        l[min_index+1:]    aim < l[min_index]:        l[:min_index-1]    aim == l[min_index]        return min_index
第一次尝试版 
# print(len(l))# l1 = [1, 3, 5, 7, 8, 10, 11]
# def binary_search(li,aim):  # 1次:[1, 3, 5, 7, 8, 10, 11] aim 8      2次 :li = [ 8, 10, 11]  8
#     mid_index = len(li) // 2  # 1次:min_index: 3    2 次:min_index 1    3次:0
#
#     if aim > li[mid_index]:  # 1次:8 > 7
#         return binary_search(li[mid_index+1:], aim) # [ 8, 10, 11]  8
#
#     elif aim < li[mid_index]:  # 2 次:8 < 10
#         return binary_search(li[:mid_index], aim)  # 3次: [8] 8
#
#     elif aim == li[mid_index]:
#         return mid_index
#     else:
#         return None
# print(binary_search(l1,8))

第二次尝试版 
# l1 = [1, 3, 5, 7, 8, 10, 11]
#
# def binary_search(li,aim,start=0,end=None):      # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 6
#                                                  #  第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3
#                                                  #  第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3
#                                                  #  第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
#                                                  #  第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
#     end = len(li) - 1 if end is None else end
#     mid_index = (end - start) // 2 + start # 第一次 mid 3  第二次:mid 1  第三次:mid:2  第四次:mid:3
#
#     if aim > li[mid_index]:
#         return binary_search(li, aim, start=mid_index+1, end=end)  # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3
#                                                                    # 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3
#     elif aim < li[mid_index]:
#         return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3
#                                                                     # 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
#     elif aim == li[mid_index]:
#         return mid_index
#     else:
#         return None
#
# print(binary_search(l1,6))

第三次最终版
l1 = [1, 3, 5, 7, 8, 10, 11]def binary_search(li,aim,start=0,end=None):      # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 6#  第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3#  第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3#  第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3#  第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3end = len(li)  if end is None else endmid_index = (end - start) // 2 + start # 第一次 mid 3  第二次:mid 1  第三次:mid:2  第四次:mid:3if start <= end:if aim > li[mid_index]:return binary_search(li, aim, start=mid_index+1, end=end)  # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3# 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3elif aim < li[mid_index]:return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3# 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3elif aim == li[mid_index]:return mid_indexelse:return Noneprint(binary_search(l1,11))

 
 
 
 

转载于:https://www.cnblogs.com/HoneyTYX/p/9057815.html

递归函数 二分查找法 的一些用法相关推荐

  1. Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)

    二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...

  2. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  3. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  4. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  5. 每天5分钟玩转python3算法:二分查找法

    从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...

  6. java for循环和数组--冒泡排序、二分查找法

    //100以内与7相关的数 for(int a=1;a<=100;a++){     if(a%7==0||a%10==7||a/10==7){      System.out.print(a+ ...

  7. 学习练习 java 二分查找法

    1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...

  8. 二分查找法、顺序查找法

    //二分查找法 第一种方法 function erfen($x,$arr){$count=count($arr);$s=0;$h=$count-1;while ( $s<= $h) {$midd ...

  9. java算法2_二分查找法

    比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...

  10. 二分查找法---java实现

    package com.hbut.test2; public class BinaryFind { public static void main(String[] args) { int arr[] ...

最新文章

  1. 差异基因分析:fold change(差异倍数), P-value(差异的显著性)
  2. MATLAB和Python读取wave文件的波形对比
  3. 手机与笔记本蓝牙配对
  4. XenDesktop5 SP1发布在即
  5. Nginx的启动、停止
  6. ModuleNotFoundError: No module named 'tinymce
  7. oracle 连接greenplum,Oracle通过DBLINK访问GreenPlum
  8. Pandas 分割字符串
  9. 淮阴工学院计算机专业的考研率,淮阴工学院江淮学院(淮阴工学院考研录取率)...
  10. solr集群solrCloud的搭建
  11. user 不在 sudoers 文件中。此事将被报告。
  12. 动态cookie-ob混淆
  13. 计算机技能培训工作计划,计算机培训教学计划范文
  14. 知乎:前端IDE 那个流行,那个好;
  15. 干货 | 携程平台化常态化数据治理之路
  16. julia语言 python解释器_Julia官宣:为机器学习构建一种语言和编译器
  17. 静态,关键字:static 接口,IUSB , API 接口关键字:interface
  18. idea git拉取文件变蓝色,将蓝色变成白色的解决方法
  19. 高并发基础之Java并发包
  20. 马克鳗标记及文字图片工具安装步骤mac版本

热门文章

  1. 关于安装centOS精简版ifconfig无效的问题
  2. [渝粤教育] 武汉理工大学 金属工艺学B 参考 资料
  3. 【渝粤教育】国家开放大学2018年秋季 2094T法理学 参考试题
  4. 小数据、高准确率的文本分类:利用迁移学习创造通用语言模型
  5. MOOSE相场模块的内核模型
  6. MATLAB 与Modelsim之间对测试系统的联合仿真
  7. (转)Linux中的screen命令使用
  8. chrome调式工具
  9. go tour - Go 入门实验教程
  10. 连表查询 个人感觉就是根据笛卡尔积产生的数据后 每条去匹配如果 匹配成功那么就筛选出来...