递归二分查找

def find(list,num):
    length = int(len(list) / 2)   #取列表长度中间值
    if length > 0:
        list_left = list[:length]
        list_right = list[length:]
        if num > list_left[-1]:
            print(‘num肯定在右半边的列表里‘)
            list = list_right
            print(list)
            return find(list,num)
        elif num < list_right[0]:
            print(‘num肯定在左半边的列表里‘)
            list = list_left
            print(list)
            return find(list,num)
    else:
        print(‘find it!‘)
find(list(range(1000)),605)

原文地址:https://www.cnblogs.com/quegai18/p/9366110.html

时间: 2024-10-07 05:52:06

递归二分查找的相关文章

冒泡排序,递归二分查找法,二分查找法

#冒泡排序list1=[2,4,5,6,7,8,9,11,30,35,38,41,42] def bubble_sort(list): for i in range(len(list)-1): for j in range(len(list)-1-i): if list[j]>list[j+1]: list[j],list[j+1]=list[j+1],list[j] print(list) list1=[2,4,55,6,78,38,95,11,30,35,38,41,42] bubble_s

算法前戏 递归 二分查找 列表查找

一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略时,必须有一个明显的结束条件,称为递归出口.问题规模相比上次递归有所减少, ③递归算法解题通常显得很简洁,但递归算法解题的效率较低.所以一般不倡导使用递归算法设计程序. ④在递归调用的过程当中系统的每一层的返回点.局部变量等开辟了栈来存储.递归函数次数过多容易造成栈溢出等. 所以一般不倡导用递归算法

用递归要小心---以递归二分查找为例

昨天面试的时候被问了好多问题,今天再做,有些部分竟然连起来了:二分查找.递归.局部变量静态变量(静态局部变量),可能还有更多,待我慢慢总结.. OK进入正题. 一. 首先 写个二分查找的函数.因为之前只是了解过这个算法,实际自己写还没写过,想了想,如果不用递归,一时没啥思路,那就用递归吧 // This is v0.1 and there may be errors. #include <stdio.h> int binary_search(int a[], int left, int rig

找数字(递归,二分查找)

题目:在一从大到小排序的序列中用递归找一个数在不在这序列,在输出yes,不在输出no 这题用了二分查找的递归实现 思路: 把数组和变量都变成全局变量方便递归函数修改 然后如果不可能就跳出循环 如果可能但现在没找到就缩小范围进入下一个递归过程 如果找到了就输出 代码: #include<bits/stdc++.h> using namespace std; int a[1000]; int n,key; int finder(int l,int r)//左和右 { if(l>r) { co

18.07.20(lambda().sorted().filter().map().递归.二分查找)

1.lambda() 匿名函数 lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明一个函数 语法:函数名 = lambda 参数:返回值 注意: (1)参数可以有多个,多个参数用逗号隔开 (2)匿名函数不管多复杂.只写一行.且逻辑结束后直接返回数据 (3)返回值和正常函数一样1,可以是任意数据类型 我们通过__name__()查看函数名字 例: a = lambda x : x * xprint(a(5)) ==>25print(a.__name__) ==><lamb

递归和非递归的二分查找

思路很简单,代码注释已标注 #include <stdio.h> //递归二分查找 int binarySearch(int*start,int *end,intfindData){ if (start > end) {      // 递归边界条件 return -1; } int *mid = start + (end - start)/2;     //根据中间值不断二分缩小待查元素所在范围 if (findData == *mid) { return *mid; }else if

二分查找算法(递归与非递归两种方式)

首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下所示. /* * 非递归二分查找算法 * 参数:整型数组,需要比较的数. */ public static int binarySearch(Integer[]srcArray,int des){ //第一个位置. int low=0; //最高位置.数组长度-1,因为下标是从0开始的. int h

算法_001_二分查找算法

 二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:     1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,    2.寻找{6, 7, 8, 9}的中位数,为7,7>

9.10 二分查找 gcc makefile gdb调试

 二分查找的迭代和递归实现: #include <stdio.h> #include <stdlib.h> int find1(int *a, int low , int high , int key)//迭代二分查找 { int mid = 0; while (low <= high) { mid = (low+high)/2; if (a[mid] == key) return mid; else if (a[mid] < key) low = mid + 1; e