7.7 递归

7.7 递归

递:传递;归:回归

#函数的嵌套
def f2():
    print('from f2')

def f1 ():
    print('from f1')
    f2()

f1()
from f1
from f2

7.7.1 函数递归

# def f2():
#     print('from f2')

def f1 ():
    print('from f1')
    f1()

# f1()
#无终止条件

递归:函数不断的调用自身,类似于循环必须有终止条件

#打印1-10
def f(x):
    print(x)
    x+=1 #变量修改
    if x==11:
        return
    f(x) #传入函数

f(1)
#有终止条件 
1
2
3
4
5
6
7
8
9
10
#后一个人比前一个人小2岁,计算第5个人多少岁
def guess_age(age,count):
    count-=1
    age-=2
    if count==1:
        print(age)
        return
    
    guess_age(age,count)

age=guess_age(38,5)

30
#改进返回值
def guess(count):
    count-=1

    if count==1:
        return 26
    return guess(count)+2

res=guess(5)
print(res)
32
#上述代码递归过程
guess(5)=guess(4)+2
guess(4)=guess(3)+2
guess(3)=guess(2)+2
guess(2)=26

guess(5)=guess(4)+2=(guess(3)+2)+2==((guess(2)+2)+2)+2=26+2+2+2=32

折半查找

import time

def  find_num(num,lis):
    if num>lis[len(lis)-1]:
       print('查找元素不在该列表范围内')
       return
    mid=len(lis)//2

    if lis[mid] < num:
        lis=lis[mid+1:]
        find_num(num,lis)
        
    elif lis[mid] > num:
        lis=lis[:mid]
        find_num(num,lis)
        
    elif lis[mid]==num:
        print('找到了')
    
    
lis =[i for i in range(100000000)]
start=time.time()
find_num(522,lis)
end=time.time()
print(end-start)
找到了
0.8514950275421143
posted @ 2025-08-25 11:32  bokebanla  阅读(6)  评论(0)    收藏  举报