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. 递归的缺点

  占用内存

4. 能看懂递归

# 算年龄

def age(n):
    if n == 4:
        return 40
    elif n>0 and n<4:
        return age(n+1) + 2

print(age(1))

# 学着看递归
‘‘‘
def age(1): #46
    if 1 == 4:
        return 40
    elif 1>0 and 1<4:
        return age(2) + 2   #44+2 = 46

def age(2): #44
    if 2 == 4:
        return 40
    elif 2>0 and 2<4:
        return age(3) + 2   #42+2 = 44

def age(3): #42
    if 3 == 4:
        return 40
    elif 3>0 and 3<4:
        return age(4) + 2   #40+2 = 42

def age(4): #40
    if 4 == 4:
        return 40
    elif 4>0 and 4<4:
        return age(4+1) + 2
‘‘‘

5. 应用场景

6. 初识递归

7. 算法——二分查找算法(必须有序排列)

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,82,83,88]
def find(l,aim,start = 0,end=None):
    end = len(l) if end is None else end
    mid_index = (end - start) // 2 + start  #计算中简值
    if start <= end:
        if l[mid_index] < aim:
            l[mid_index + 1:]
            return find(l, aim, start=mid_index + 1, end=end)
        elif l[mid_index] > aim:
            return find(l, aim, start=start, end=mid_index - 1)
        else:
            return mid_index
            # print(‘找到了‘, mid_index, aim)
    else:
        return ‘找不到这个值啊‘
ret1 = find(l,67)
ret2 = find(l,64) 

print(ret1) #找到了 18
print(ret2) #找不到这个值啊

8. 三级菜单——递归实现

原文地址:https://www.cnblogs.com/xc-718/p/9751139.html

时间: 2024-10-17 14:27:18

Python——递归、二分查找算法的相关文章

Python 实现二分查找算法

最近在学习python,由于在面试中,二分查找算法面试率极高,所以使用python做了一个实现. def search1(sequence, number): lower = 0 upper = len(sequence) - 1 while lower <= upper: mid = (lower + upper) // 2 if number > sequence[mid]: lower = mid + 1 elif number < sequence[mid]: upper = m

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

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

基础算法介绍 —— 二分查找算法

不知不觉在目前的公司待满3年了,打算回家找份工作.面试中被问到关于算法的题目:有哪些常见的查找算法?下来就把我所掌握的查找算法分享给大家,本文主要介绍二分查找算法. 算法定义(摘自百度):二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果

python函数:递归函数及二分查找算法

本文和大家分享的主要是python的递归函数及二分查找算法相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story() 老和尚讲故事 递归的定义 -- 在一个函数里再调用这个函数本身.这种魔性的使用函数的方式就叫做 递归 . 递归的最大深度:997 1.python递归最大层

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

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

二分查找算法的递归实现

还有一个典型的递归例子是对已排序数组的二分查找算法.博e百娱乐城 现在有一个已经排序好的数组,要在这个数组中查找一个元素,以确定它是否在这个数组中,很一般的想法是顺序检查每个元素,看它是否与待查找元素相同.这个方法很容易想到,但它的效率不能让人满意,它的复杂度是O(n)的.现在我们来看看递归在这里能不能更有效. 还是考虑上面的两个条件: 第一:这个问题是否可以分解为形式相同但规模更小的问题? 第二:如果存在这样一种分解,那么这种分解是否存在一种简单情境? 考虑条件一:我们可以这样想,如果想把问题

二分查找算法的Python实现

问题 二分查找 list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找 思路说明 在查找方面,python中有list.index()的方法.例如: >>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1 >>> a.index(5) #如果没有该值,则报错 Traceback (most recent call last): Fi

二分查找算法(递归,循环)

二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为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>6,

python之路——二分查找算法

楔子 如果有这样一个列表,让你从这个列表中找到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] 你说,so easy! l.index(66)... 我们之所以用index方法可以找到,是因为python帮我们实现了查找方法.如果,index方法不给你用了...你还能找到这个66么? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,