递归实现二分查找

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018-01-31 20:29 # @Author :  hhj# @Site :  # @File : 递归实现二分查找.py# def func(arg1,arg2,stop):#     if arg1==0:#         print(arg1,arg2)#     arg3=arg1+arg2#     print(arg3)#     if arg3<stop:#         func(arg2,arg3,stop) #递归### func(0,1,100)

def binary_search(data_source,find_n):    mid=int(len(data_source)/2)    if len(data_source)>1:    #  递归结束条件        if data_source[mid]>find_n:     #要找的值在左边,即:data in left            print("data in left of [%s]" %data_source[mid])            # print(data_source[:mid])            binary_search(data_source[:mid],find_n)           #做切片

elif data_source[mid] < find_n:  # 要找的值在左边,即:data in right            print("data in right of [%s]" % data_source[mid])            # print(data_source[mid:])            binary_search(data_source[mid:],find_n)  # 做切片

else:           #若            print("found data:",data_source[mid])    else:        print("connot find .....")

if  __name__=="__main__":

data=list(range(0,7000000))    # print(data)    binary_search(data,35666)

原文地址:https://www.cnblogs.com/hhjwqh/p/8394958.html

时间: 2024-11-09 01:41:39

递归实现二分查找的相关文章

关于递归与二分查找技术

简单的说,递归就是函数自己调用自己.在数据结构里面会经常使用递归,因为递归代码比较简洁优雅,易懂. 编写递归程序时主要注意三点 (1)递归总有一个最简单的情况,方法的第一条语句总是包含return的条件语句 (2)递归调用总是去尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况.在下面代码中,第四个参数和第三个参数的差值一直在缩小 (3)递归调用的父问题和尝试解决的子问题之间不应该有交集.在如下代码中,两个子问题,各自操作的数组部分是不同的 下面是二分法查找的递归实现和非递归实现: 特

递归和非递归的二分查找

思路很简单,代码注释已标注 #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

4-8日 递归和二分查找

1,递归函数 在函数中调用函数本身自己.执行一次开辟一个空间,python对你的内存有一个保护机制,默认只能递归到998层. def func(n): n += 1 print(n) func(n) func(0) 2,二分查找 二分查找前提是有序且唯一的数字列表. li = [1,21,30,32,44,55,56,433,] def search(num,l,start=None,end=None): start = start if start else 0 end = end if en

day_06、递归、二分查找

递归 递归意味着调用自身. 递归函数通常包括以下俩部分. 基线条件:(针对最小的问题)满足这个条件是将直接返回一个值. 递归条件:包含一个或多个调用,这些调用旨在解决问题的一部分. 1 def fun(n): 2 if n == 1: 3 return 1 4 else: 5 return n * fun(n-1) 乘阶 1 def fun(n, x): 2 if x == 0: 3 return 1 4 else: 5 return n * fun(n, x-1) 幂 1 def fun(n)

Python——递归、二分查找算法

递归函数 1. 递归 (1)什么是递归:在函数中调用自身函数(2)最大递归深度:默认997/998--是Python从内存角度出发做的限制 n = 0 def story(): global n n+= 1 print(n) story() #997/998 story() (3)修改最大深度:最好不要改--递归次数太多,则不适合用递归解决问题 import sys sys.setrecursionlimit(2000) #1997/1998 2. 递归的优点 会让代码变简单 3. 递归的缺点

递归与二分查找

# 斐波那契数列1 1 2 3 5 8 13 def func(n): print(n) if n==1 or n ==2: return 1 else: return func(n-1) + func(n - 2) print(func(6)) # result:8 # 函数在执行递归的过程中,如果获取不到结果会将当前状态进行存储,继续向下递归直到返回结果,python中的递归深度为997-998. # 递归解析 # 第一次递归进入执行执行func(6 - 1),没有结果继续向下执行func(

冒泡排序、递归、二分查找

冒泡排序:给出一个纯数字列表. 请对列表进行排序. 思路: 1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 102.循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端. 3.想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表. li=[11

二分查找(递归与非递归)

递归的二分查找: 1 int search(int *a, int target, int p, int r) 2 { 3 if (p <= r) 4 { 5 int mid; 6 7 mid = (p + r) / 2; 8 if (*(a + mid) == target) 9 return 1; 10 else if (*(a + mid) > target) 11 return search(a, target, p, mid - 1); 12 else 13 return searc

(续)二分查找(不用递归)

接着上一篇,其实不用递归进行二分查找也很简单,当时咋就没想起来呢.. OK废话少说, show me the code 1 #include <stdio.h> 2 3 int binary_search_no_recursion(int a[], int left, int right, int key){ 4 while(left<=right){ //attention!!! 5 int mid = (left+right)/2; 6 if(key > a[mid]) 7 l