zoukankan      html  css  js  c++  java
  • python---递归和二分查找

    递归的定义:函数内部对函数自己的调用

    使用递归求阶乘:

    def func(n):

      if n == 1 :return 1

      else:retuen n*f(n-1)

    print(func(4))  结果为120

    def get_age(n):

      if n == 3:return 40

      else: return f(n+1)+2

    递归就是在每一次调用下一个函数的过程中,不断往下走叫做递,总有一个地方会的到一个确切的结果,将确切的结果返回的时候叫做归

    递归就是不断的往函数内部走,再回归到函数外部这一圈的过程叫做递归

    二分查找:

    算法:计算问题的方法,计算机的算法是在计算一些比较复杂的问题,所采用的空间上(节省内存)和时间上(执行效率)更有优势的方法

    递归求解二分查找,只能解决有序的数字集合的查找问题

    查找数字的下标值

    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 num > l[mid]:
    cal(l,num,mid+1,end)
    elif num < l[mid]:
    cal(l,num,start,mid-1)
    else:
    print('找到了',l[mid],mid)
    cal(l,41,0,len(l))

    存在的问题:1,传递的参数太多;2,查找的数不存在,报错;3,结果不能用print 要使用return

    解决问题2;代码开始添加判断条件
    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):
    if start<end:
    mid =(end -start)//2 +start
    if num > l[mid]:
    cal(l,num,mid+1,end)
    elif num < l[mid]:
    cal(l,num,start,mid-1)
    else:
    print('找到了',l[mid],mid)
    else:
    print('没找到')
    cal(l,6,0,len(l))----->输出结果为没有找到

    解决问题3:
    def cal(l,num,start,end):
    if start<=end:
    mid =(end -start)//2 +start
    if num > l[mid]:
    return cal(l,num,mid+1,end)
    elif num < l[mid]:
    return cal(l,num,start,mid-1)
    else:
    return mid
    else:
    return '没找到'
    print(cal(l,6,0,len(l)))---->输出结果为没找到
    解决问题3:
    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=0,end=None):
    end = len(l)-1 if end is None else end
    if start<=end:
    mid =(end -start)//2 +start
    if num > l[mid]:
    return cal(l,num,mid+1,end)
    elif num < l[mid]:
    return cal(l,num,start,mid-1)
    else:
    return mid
    else:
    return None
    print(cal(l,66))--->输出结果为17


  • 相关阅读:
    Fastify 系列教程四 (求对象、响应对象和插件)
    Fastify 系列教程三 (验证、序列化和生命周期)
    Fastify 系列教程二 (中间件、钩子函数和装饰器)
    Fastify 系列教程一 (路由和日志)
    使用 Vuejs 开发 chrome 插件的注意事项
    五十行javascript代码实现简单的双向数据绑定
    markown编辑器截图粘贴预览,并将图片传至七牛云
    线程与进程的区别
    TeamViewer卡在正在初始化显示参数
    Chrome 字体模糊解决
  • 原文地址:https://www.cnblogs.com/xiaoAzaina/p/9004839.html
Copyright © 2011-2022 走看看