day16 -- 递归函数,二分查找

Posted lianghui-lianghui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day16 -- 递归函数,二分查找相关的知识,希望对你有一定的参考价值。

一,递归函数

1,1初始递归

递归函数 :  在一个函数里调用这个函数本身

递归的最大深度 : 998

递归函数如果不受外力的阻止会一直执行下去,但是函数的每次调用都会产生一个属于自己的名称空间,如果一直调用下去的话,会出现名称空间过多导致的内存问题,所以为了避免这种现象,强制将递归层数控制在了997

def foo(n):
    print(n)
    n = n + 1
    foo(n)
foo(1

1,2 ,递归示例

问alex多大了,告诉你alex比egon大两岁,

然后去问egon多大了,egon说我比wusir大两岁,

然后又去问wusir,wusir说他比太白大两岁,

然后去问太白,太白说他18,这样就可以计算出alex到底多大了

age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18

然后我们用函数表示

def age(n):
    if n == 1:
        return 18
    else:
        return age(n - 1) + 2
print(age(4))
#24

解析:

def age(4):
  if n == 1:
    return 26
  else:
    return age(3) + 2
def age(3):
  if n == 1:
    return 26
  else:
    return age(2) + 2
 
def age(2):
  if n == 1:
    return 26
  else:
    return age(1) + 2
def age(1):
  if n == 1:
    return 26
  else:
    return age(0) + 2
print(age(4))
age(4) = 26 + 2 + 2 + 2
 
 
二: 二分查找算法
是最经典最简单的算法
前提: 有序的,不重复的数字序列
l1 = [1, 2, 4, 5, 7, 9]
def two_search(l,aim,start=0,end=None):
    end = len(l)-1 if end is None else end
    mid_index = (end - start) // 2 + start
    if end >= start:
        if aim > l[mid_index]:
            return two_search(l,aim,start=mid_index+1,end=end)

        elif aim < l[mid_index]:
            return two_search(l,aim,start=start,end=mid_index-1)

        elif aim == l[mid_index]:
            return mid_index
        else:
            return 没有此值
    else:
        return 没有此值
print(two_search(l1,9))

 

 

以上是关于day16 -- 递归函数,二分查找的主要内容,如果未能解决你的问题,请参考以下文章

day16Pyhton 递归递归理解

Python Day 15 (递归函数二分查找算法)

day_06递归二分查找

Day589.二分查找(非递归) -数据结构和算法Java

oldboy seventeenth day. I love Python. 万恶之神: 递归; 初始算法: 二分查找;

day05匿名函数,内置函数,二分法,递归,模块