06---python基础(六)(递归、模块、正则表达式)

递归

在函数的内部调用自己
递归的最大深度:998

小例子 猜年龄

alex多大了 alex 比 wusir 大两岁 40+2+2
wusir多大了 wusir 比 金老板大两岁 40+2
金老板多大了 40了

# age(1)
# n = 1 age(2)+2
# n = 2 age(3)+2
# n = 3 age(3) = 40

def age(n):
    if n == 3:
        return 40
    else:
        return age(n+1)+2

print(age(1))
#44

解析:
# # n = 1
# def age(1):
#     if 1 == 3:
#         return 40
#     else:
#         return age(2)+2
#
# # n = 2
# def age(2):
#     if 2 == 3:
#         return 40
#     else:
#         return age(3)+2
#
# # n = 3
# def age(3):
#     if 3 == 3:
#         return 40

递归求解二分查找算法

算法 计算一些比较复杂的问题
采用的在空间上(内存里)或时间上(执行时间)更有优势的方法
排序 500000万个数,快速排序,堆排序 冒泡排序

99*99 = 99*(100-1)= 9909-99 = 9801 #人类的算法
99*99 #接近计算机的算法

有序的数字集合的查找问题

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 cal(l,num,start,end):
    mid = (end - start)//2 + start
    if l[mid] > num :
        cal(l, num, start, mid-1)
        elif l[mid] < num:      # 13  24
            cal(l,num,mid+1,end)
        else:
            print('找到了',mid,l[mid])
    else:
         print('没找到')
cal(l,66,0,len(l)-1)   #如果写60  就报错 因为都没有

#找到了 17 66

解析:

# #
# # def cal(l,num=66):
# #     length = len(l)
# #     mid = length//2
# #     if num > l[mid]:
# #         l = l[mid+1:]
# #         cal(l,num)
# #     elif num < l[mid]:
# #         l = l[:mid]
# #         cal(l, num)
# #     else:
# #         print('找到了',l[mid],mid)
# # cal(l,66)
#
# 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 cal(l,66,0,24):
#     mid = 12 + 0
#     if 41 > 66 :
#         cal(l, num, start, mid-1)
#     elif 41 < 66:      # 13  24
#         cal(l,66,13,24)
#     else:
#         print('找到了',mid,l[mid])
#
# 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 cal(l,66,13,24):
#     mid = 5 + 13
#     if 67 > 66 :
#         cal(l, 66, 13, 17)
#     elif l[mid] < num:      # 13  24
#         cal(l,num,mid+1,end)
#     else:
#         print('找到了',mid,l[mid])
#
# 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 cal(l,66,13,17):
#     mid = 2 + 13
#     if 55 > 66 :
#         cal(l, num, start, mid-1)
#     elif 55 < 66:
#         cal(l,66,16,17)
#     else:
#         print('找到了',mid,l[mid])
#
# 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 cal(l,60,16,17):
#     mid =0 + 16
#     if 56 > 60 :
#         cal(l, num, start, mid-1)
#     elif 56 < 60:      # 13  24
#         cal(l,60,17,17)   #None
#     else:
#         print('找到了',mid,l[mid])
# #
# # 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 cal(l,60,17,17):
#     mid = 0 + 17
#     if 60 > 66 :
#         cal(l, num, start, mid-1)
#     elif 60 < 66:      # 13  24
#         return cal(l,60,18,17)
#     else:
#         print('找到了',17,66)
#
 def cal(l, 60, 18, 17):
     if start <end:
         mid = 0+18
         if 67 > 66:
             cal(l, 60, 18,17)
         elif 60 < 66:  # 13  24
             cal(l, 60, 18, 17)
         else:
             print('找到了', 17, 66)
     else:
         print('没找到')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值