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

    递归函数

    递归的定义——在一个函数里再调用这个函数本身。

    递归的最大深度是997,这是python从内存的角度出发给的安全限制,如果递归的次数太多,就不适合用递归来实现

    递归的的缺点:占内存             递归的有点: 让代码变得简单

    # n = 0
    # def story():
    #     global n
    #     n += 1
    #     print(n)
    #     story()
    # story()
    View Code
    # alex 多大       n = 1   age(1) = age(2)+2 = age(n+1) + 2
    # alex比egon大两岁
    # egon多大?      n = 2   age(2) = age(3) + 2 = age(n+1) +2
    # egon比wusir大两岁
    # wusir多大       n = 3   age(3) = age(4) + 2 = age(n+1) +2
    # wusir比金老板大两岁
    # 金老板多大?
    # 金老板40了      n = 4   age(4) = 40
    
    def age(n):
        if n == 4:
            return 40
        elif n >0 and n < 4:
            return age(n+1) + 2
    print(age(1))
    
    #1. def age(1):  14 #age(1) = age(2)+2 #age(1) = 44+2
    #     if 1 == 4:
    #         return 40
    #     elif 1 >0 and 1 < 4:
    # 2.        return age(1+1) + 2  13.#age(2)+2
    #
    #3. def age(2):   12.#age(2) = age(3)+2 #age(2) = 42+2
    #     if 2 == 4:
    #         return 40
    #     elif 2 >0 and 2 < 4:
    # 4.        return age(2+1) + 2   11. #age(3)+2
    #
    #5. def age(3):  10.#age(3) = age(4)+2 #age(3) = 40+2
    #     if 3 == 4:
    #         return 40
    #     elif 3 >0 and 3 < 4:
    # 6.        return age(3+1) + 2  9.#age(4)+2 =42
    #
    #7. def age(4):  #agw(4) = 40
    #     if 4 == 4:
    #   8.      return 40
    #     elif 2 >0 and 2 < 4:
    #         return age(2+1) + 2
    
    print(age(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]

    你观察这个列表,这是不是一个从小到大排序的有序列表呀?

    如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

    这就是二分查找算法

     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 find(l,aim,start = 0,end = None):
        end = len(l) if end is None else end
        mid_index = (end - start)//2 + start
        if start <= end:
            if l[mid_index] < aim:
                return find(l,aim,start =mid_index+1,end=end)
            elif l[mid_index] > aim:
                return find(l, aim, start=start, end=mid_index-1)
            else:
                return mid_index
        else:
            return '找不到这个值'
    View Code

    # 返回值
    # 不要只看到return就认为已经返回了。要看返回操作是在递归到第几层的时候发生的,然后返回给了谁。
    # 如果不是返回给最外层函数,调用者就接收不到。
    # 需要再分析,看如何把结果返回回来。

    # 斐波那契  # 问第n个斐波那契数是多少
    # 1,1,2,3,5,8   #fib(6) = fib(5) + fib(4)
    # def fib(n):
    #     if n == 1 or n==2:
    #         return 1
    #     return fib(n-1) + fib(n-2)
    # print(fib(50))
    
    # fib(6) = fib(5) + fib(4)
    # fib(5) = fib(4)+fib(3)
    # fib(4) = fib(3)+fib(2)
    # fib(3) = fib(2)+fib(1)
    # fib(2) = 1
    # fib(1) = 1
    # def fib(n,l = [0]):
    #     l[0] +=1
    #     if n ==1 or n == 2:
    #         l[0] -= 1
    #         return 1,1
    #     else:
    #         a,b = (n-1)
    #         l[0] -= 1
    #         if l[0] == 0:
    #             return a+b
    #         return b,a+b
    # print(fib(50))
    def fib(n,a=1,b=1):
        if n==1 : return a
        return fib(n-1,b,a+b)
    
    print(fib(5))
    
    # 阶乘
        #3! 3*2*1
        # 2! 2*1
        # 1! 1
    # def fac(n):
    #     if n == 1 :
    #         return 1
    #     return n * fac(n-1)
    #
    # print(fac(100))
    View Code
  • 相关阅读:
    Elixir 学习资源
    elixir 模块
    elixir 表单 map
    elixir 关键字列表
    elixir case cond if
    elixir 模式匹配
    elixir 基础数据结构
    5、OpenCV Python ROI和泛洪填充
    6、OpenCV Python 图像模糊
    4、OpenCV Python 像素运算
  • 原文地址:https://www.cnblogs.com/bzluren/p/10667407.html
Copyright © 2011-2022 走看看