zoukankan      html  css  js  c++  java
  • five--递归函数

    1.复习

     1  1.只要和计算时间有关的,一定放在离func最近的地方
     2     2.range本身是  迭代器
     3     3.生成器和迭代器的本质是一样的    一般是想取所有值,又不同一时间出现在内存中
     4     4.迭代器--可以被for循环 本质:节省内容空间  没有索引取值的概念  ---公式
     5     5.生成器:python内部提供的;yield函数 执行生成器函数,得到一个生成器,不会执行这个函数中的代码!!  有几个yield,就能从中取出几个值
     6           生成器表达式:也会返回一个生成器,不会直接被执行
     7           注意:!!!
     8           1.每一个生成器都会从头开始取值,当取到最后的时候,生成器中就没有值了
     9          2.一个生成器只能用一次
    10          例子
    11          不明白打印id
    12          装饰器、生成器可先放一放、刷题看!框架项目作业 找工作前,再刷一次面试题
    13      6.内置、匿名
    14       5个常考(map、filter、sorted、max、min)
    15         filter 3种写法。。。(+lambda)  自己复习!
     1 # 装饰器的进阶
     2     # 给装饰器加上一个开关  - 从外部传了一个参数到装饰器内
     3     # 多个装饰器装饰同一个函数 - 套娃
     4         # 每个装饰器都完成一个独立的功能
     5         # 功能与功能之间互相分离
     6         # 同一个函数需要两个或以上额外的功能
     7 # def wrapper1(func):
     8 #     def inner(*args,**kwargs):
     9 #         '''执行a代码'''
    10 #         ret = func(*args,**kwargs)
    11 #         '''执行b代码'''
    12 #         return ret
    13 #     return inner
    14 #
    15 # def wrapper2(func):
    16 #     def inner(*args,**kwargs):
    17 #         '''执行c代码'''
    18 #         ret = func(*args,**kwargs)
    19 #         '''执行d代码'''
    20 #         return ret
    21 #     return inner
    22 #
    23 # @wrapper1
    24 # @wrapper2
    25 # def func():pass
    26 
    27 # a c func d b
    28 
    29 # timmer login
    30 # timmer logger
    31 
    32 # 生成器和迭代器
    33 # 迭代器 : iter next
    34 # 可以被for循环 节省内存空间 它没有所谓的索引取值的概念 当前的值和下一个值- 公式
    35 # 生成器和迭代器本质上是一样的
    36     # yield函数
    37         # 执行生成器函数 会得到一个生成器 不会执行这个函数中的代码
    38         # 有几个yield,就能从中取出多少个值
    39     # 生成器表达式
    40         # 生成器表达式也会返回一个生成器 也不会直接被执行
    41         # for循环里有几个符合条件的值生成器就返回多少值
    42     # 每一个生成器都会从头开始取值,当取到最后的时候,生成器中就没有值了
    43         # 一个生成器只能用一次
    44 # def fff():
    45 #     for i in range(10):
    46 #         yield i
    47 # g2 = (i**i for i in range(20))
    48 # g = fff()
    49 # print(next(g))     0
    50 # print(next(g))       1
    51 # print(next(g))    2
    52 
    53 # print(next(fff()))    0
    54 # print(next(fff()))    0
    55 # print(next(fff()))    0
    56 # for i in fff():
    57 #     print(i)     
    58 
    59 # 如果现在明白 可以趁热打铁 先巩固一下
    60 # 如果不明白 先放一放
    61     # 框架和项目 作业
    62     # 毕业的时候 找工作之前 再刷一次面试题
    63 # 要相信计算是不会出错
    64 # python11期
    65 
    66 # 内置函数和匿名函数
    67 # map filter sorted max min zip
    68 打印0-19的偶数
    69 # def func(n):
    70 #     if n%2 == 0:
    71 #         return True
    72 # ret = filter(func,range(20))
    73 # ret = filter(lambda n: True if n%2 == 0 else False ,range(20))
    74 # ret = filter(lambda n: n%2 == 0 ,range(20))
    View Code

    2.递归

    7.递归(考脑力)----在函数的内部调用自己,,不知道有多少层的字典调用自身的用递归
            递归的最大深度:998
            小例子:猜年龄
            递归求解--二分查找算法:只针对有序的数字集合的查找问题,快速
                算法:在空间(内存里)时间(执行时间)上有优势的方法
                常考算法:快速排序、堆排序      冒泡排序
                查找:可用二分查找算法
                写法:1.递归,位置为0  2.优化  列表不能变:l,num,start,end
                    注意mid要+start     优化写法放在cal中   解析:执行过程有归,开始都是None
                    注2:问题:1.参数太多:加if判断(end=len(l)-1 if end is None else end)
                        2.找的数不存在 (陷入17-18死循环)-解决方法:if start<=end:  else:print('没找到)
                        3.结果不能print  要return   上一层判断中都要加上return ,否则是None,没收到返回值(参考图片递归初识2--加return)  可以画图判断
    

      

     1 # 递归 —— 在函数的内部调用自己
     2 # 递归的最大深度 : 998
     3 # 小例子:
     4 # 猜年龄
     5 # alex多大了     alex 比 wusir 大两岁  40+2+2
     6 # wusir多大了    wusir 比 金老板大两岁   40+2
     7 # 金老板多大了   40了
     8 # age(1)
     9 # n = 1 age(2)+2
    10 # n = 2 age(3)+2
    11 # n = 3 age(3) = 40
    12 
    13 # def age(n):
    14 #     if n == 3:
    15 #         return 40
    16 #     else:
    17 #         return age(n+1)+2
    18 #
    19 # print(age(1))
    20 
    21 # # n = 1
    22 # def age(1):
    23 #     if 1 == 3:
    24 #         return 40
    25 #     else:
    26 #         return age(2)+2
    27 #
    28 # # n = 2
    29 # def age(2):
    30 #     if 2 == 3:
    31 #         return 40
    32 #     else:
    33 #         return age(3)+2
    34 #
    35 # # n = 3
    36 # def age(3):
    37 #     if 3 == 3:
    38 #         return 40
    39 
    40 # 递归求解二分查找算法
    41 # 算法
    42 # 99*99 = 99*(100-1) = 9900-99 = 9801
    43 # 人类的算法
    44 # 99 * 99
    45 
    46 # 算法 计算一些比较复杂的问题
    47     # 所采用的 在空间上(内存里) 或者时间上(执行时间) 更有优势的方法
    48 # 排序 500000万个数 快速排序 堆排序 冒泡排序
    49 # 查找
    50 
    51 # 递归求解二分查找算法 : 有序的数字集合的查找问题
    引入
     1 def func(l,aim):
     2     mid = (len(l)-1)//2
     3     if l:
     4         if aim > l[mid]:
     5             func(l[mid+1:],aim)
     6         elif aim < l[mid]:
     7             func(l[:mid],aim)
     8         elif aim == l[mid]:
     9             print("bingo",mid)
    10     else:
    11         print('找不到')
    12 func(l,66)
    13 func(l,6)
    简单版
     1 # 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]
     2 # # 列表不能变
     3 # def cal(l,num,start,end):
     4 #     mid = (end - start)//2 + start
     5 #     if l[mid] > num :
     6 #         cal(l, num, start, mid-1)
     7 #     elif l[mid] < num:      # 13  24
     8 #         cal(l,num,mid+1,end)
     9 #     else:
    10 #         print('找到了',mid,l[mid])
    11 #
    12 # cal(l,60,0,len(l)-1)
    13 # #
    14 # # def cal(l,num=66):
    15 # #     length = len(l)
    16 # #     mid = length//2
    17 # #     if num > l[mid]:
    18 # #         l = l[mid+1:]
    19 # #         cal(l,num)
    20 # #     elif num < l[mid]:
    21 # #         l = l[:mid]
    22 # #         cal(l, num)
    23 # #     else:
    24 # #         print('找到了',l[mid],mid)
    25 # # cal(l,66)
    26 #
    27 # 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]
    28 # def cal(l,66,0,24):
    29 #     mid = 12 + 0
    30 #     if 41 > 66 :
    31 #         cal(l, num, start, mid-1)
    32 #     elif 41 < 66:      # 13  24
    33 #         cal(l,66,13,24)
    34 #     else:
    35 #         print('找到了',mid,l[mid])
    36 #
    37 # 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]
    38 # def cal(l,66,13,24):
    39 #     mid = 5 + 13
    40 #     if 67 > 66 :
    41 #         cal(l, 66, 13, 17)
    42 #     elif l[mid] < num:      # 13  24
    43 #         cal(l,num,mid+1,end)
    44 #     else:
    45 #         print('找到了',mid,l[mid])
    46 #
    47 # 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]
    48 # def cal(l,66,13,17):
    49 #     mid = 2 + 13
    50 #     if 55 > 66 :
    51 #         cal(l, num, start, mid-1)
    52 #     elif 55 < 66:
    53 #         cal(l,66,16,17)
    54 #     else:
    55 #         print('找到了',mid,l[mid])
    56 #
    57 # 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]
    58 # def cal(l,60,16,17):
    59 #     mid =0 + 16
    60 #     if 56 > 60 :
    61 #         cal(l, num, start, mid-1)
    62 #     elif 56 < 60:      # 13  24
    63 #         cal(l,60,17,17)   #None
    64 #     else:
    65 #         print('找到了',mid,l[mid])
    66 # #
    67 # # 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]
    68 # def cal(l,60,17,17):
    69 #     mid = 0 + 17
    70 #     if 60 > 66 :
    71 #         cal(l, num, start, mid-1)
    72 #     elif 60 < 66:      # 13  24
    73 #         return cal(l,60,18,17)
    74 #     else:
    75 #         print('找到了',17,66)
    76 #
    77 # def cal(l, 60, 18, 17):
    78 #     if start <end:
    79 #         mid = 0+18
    80 #         if 67 > 66:
    81 #             cal(l, 60, 18,17)
    82 #         elif 60 < 66:  # 13  24
    83 #             cal(l, 60, 18, 17)
    84 #         else:
    85 #             print('找到了', 17, 66)
    86 #     else:
    87 #         print('没找到')
    分析--可忽略
     1 # 算法
     2 # def cal(l,num,start=0,end=None):
     3 #     # if end is None:end = len(l)-1
     4 #     end = len(l)-1 if end is None else end
     5 #     if start <= end:
     6 #         mid = (end - start)//2 + start
     7 #         if l[mid] > num :
     8 #             return cal(l, num, start, mid-1)
     9 #         elif l[mid] < num:      # 13  24
    10 #             return cal(l,num,mid+1,end)
    11 #         else:
    12 #             return mid
    13 #     else:
    14 #         return None
    15 # 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]
    16 # print(cal(l,56))
    最终版
  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/lijie123/p/9004813.html
Copyright © 2011-2022 走看看