what' the python之递归函数与二分算法

Posted ゛竹先森゜

tags:

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

what‘s the 递归?

  递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数。

  递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况下用到递归的情形。

#最大997层
def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)

 

举个栗子,假设你想知道A的年龄,但你只知道A比B大2岁,B又比C大两岁,C又比D大两岁,D比E大两岁,恰好你知道E的岁数,那是不是就能知道A的岁数了呢,这就可以组成一个递归。那我们假设E的岁数是20

def age(n):
    if n == 1:
        return 20
    else:
        return age(n-1)+2

print(age(5))

 

二分算法

递归函数的一个经典用法就是二分算法,二分算法的意思是用对半切查找的方式从由一群由小到大的数组成的列表中找到要找的数字的方法

举个栗子:

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]

def func(l,aim):
    mid = (len(l)-1)//2
    if l:
        if aim > l[mid]:
            func(l[mid+1:],aim)
        elif aim < l[mid]:
            func(l[:mid],aim)
        elif aim == l[mid]:
            print("bingo",mid)
    else:
        print(找不到)
func(l,66)
func(l,6)

 

 

 

以上就是简单的二分算法,当然我们还可以将以上代码进行改进,其实是一个意思。

def func(l, aim,start = 0,end = len(l)-1 ):
    mid = (start+end)//2
    if not l[start:end+1]:
        return
    elif aim > l[mid]:
        return func(l,aim,mid+1,end)
    elif aim < l[mid]:
        return func(l,aim,start,mid-1)
    elif aim == l[mid]:
        print("bingo")
        return mid

index = func(l,68)
print(index)

 

以上是关于what' the python之递归函数与二分算法的主要内容,如果未能解决你的问题,请参考以下文章

what's the python之函数及装饰器

what' the python之面向对象(进阶)

what's the python之面向对象

what's the python之异常处理

what's the python之模块

what's the python之基本运算符及字符串列表元祖集合字典的内置方法