python教程(六)之函数(5.递归)

递归是什么,我举个例子你就明白了

def fn_a(a) :
    if a==1 :
        return 1
    else :
        return a+fn_a(a-1)
print(fn_a(100))  #5050

#如果你有学过其他编程语言,那你应该不会陌生
#这就是经典的递归,1加到100
#如果你已经非常掌握递归和二分查找,那你可以开始看下一篇文章了
#这里我只会简单的介绍一下,具体一些深入的内容,我会放到下一篇
#6.函数训练 中

#回到这里,递归的本质就是调用自己,一般的情况下我们会加上
#某个限制条件,像上面那样,当a=1时就不再进行递归

#在python中,我们使用递归的几率并不高,但依然要会

def fn_b(x,y) :
    if y==0 :
        return 1
    else :
        return x*fn_b(x,y-1)  
print(fn_b(2,3)) #8

def fn_c(x,y) :
    result = 1
    for i in range(y) :
        result*=x
    return result
print(fn_c(2,3)) #8

#上面分别是递归和我们之前学的循环,可以看出,即便我们
#还不会递归,也能解决这样的问题

二分查找,试问1-100的数字,你要猜几次才能猜中

def search(lst,num,lower=0,upper=None) :
    if upper==None : upper=len(lst)-1
    if lower==upper :
        assert num==lst[upper]
        return upper
    else :
        middle=(lower+upper)//2
        if num > lst[middle] :
            return search(lst,num,middle+1,upper)
        else :
            return search(lst,num,lower,middle) 
d=[4,7,234,11,3,6,23,7,3]
d.sort()#排了一下序
print(search(d,11)) #6

#关于二分查找的解释,可以自己查看一些说明
#并且python的bisect模块提供了标准的二分查找方法

你可能感兴趣的:(python)