递归与二分法

一、递归的定义

递归调用是函数嵌套调用的一种特殊形式,在函数调用时,直接或间接的调用了它本身,就是递归调用。

直接调用函数本身

def f1():

    print('from f1')

    f1()

f1()

间接调用函数本身

def f1():

    print('from f1')

    f2()

def f2():

    print('from f2')

    f1()

f2()

递归最大深度的修改

import sys

sys.getrecursionlimit()   #默认深度1000左右

sys.getrecursionlimit(2000)

def f1(n):

    print('from f1',n)

    f1(n+1)

f1(1)   #无限制递归调用毫无意义

二、递归调用的两个明确阶段:递推、回溯

回溯就是从外向里一层一层递归调用下去,回溯必须要有一个明确的结束条件

递推就是从里向外一层一层结束递归

def salary(n):

    if n == 1:

        return 100

    return salary(n-1)+300

print(salary(5))

三、二分法

想从一个从小到大排列的列表中找到指定的数字,遍历的效率太低了,用二分法可以极大的缩小问题规模

def search(n,l):
    print(l)
    if len(l)==0:
        print('not exist')
        return
    mid_index=len(l)//2
    if n > l[mid_index]:
        l=l[mid_index+1:]
        search(n,l)
    elif n < l[mid_index]:
        l=l[:mid_index]
        search(n,l)
    else:
        print('got it')
search(n,l)
 
 
 
 




猜你喜欢

转载自www.cnblogs.com/yaozhiyuan/p/9183120.html