zoukankan      html  css  js  c++  java
  • python之协程函数、递归、二分法

    一、协程函数:

        协程函数的语法:

        def eater(name):

                print('%s说:我开动啦' %name)
    food_list=[]
    while True:
    food=yield food_list
    food_list.append(food)
    print('%s 吃了 %s' %(name,food))

    e=eater('egon')
    e.send(None) #next(e) #初始化装饰器,
    e.close() #关闭
        解决方法:第一步:初始化函数Next(),第二部:给yield传值
    二、面向过程:
        面向过程:核心是过程二字,过程就是解决问题的步骤,
    基于面向过程去设计程序就像是在设计,一条工业流水线,是一种机械式的思维方式    #优点:程序结构清晰,可以把复杂的问题简单化,流程化
        #缺点:可扩展性差,一条流线只是用来解决一个问题
        #应用场景:linux内核,git,httpd,shell脚本
    三、递归:
      
      递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身

        递归效率低,需要在进入下一次递归时保留当前的状态
       解决方法是尾递归,即在函数的最后一步(而非最后一行)调用自己
       但是python又没有尾递归,且对递归层级做了限制

      1. 必须有一个明确的结束条件

      2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

      3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,              栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)



      递归的执行分为两个阶段:
      1 递推
      2 回溯
      
    def age(n):

       if n == 1:
              return 18
       return age(n-1)+2
         print(age(5))


    四、二分法:
        
    l=[1,2,10,2,30,40,33,22,99,31]
            def search(num,l):
    print(l)
    if len(l) > 1:
    mid=len(l)//2
    if num > l[mid]:
    #in the right
    l=l[mid:]
    search(num,l)
    elif num < l[mid]:
    #in the left
    l=l[:mid]
    search(num,l)
    else:
    print('find it')
    else:
    if num == l[0]:
    print('find it')
    else:
    print('not exists')

    search(100,l)
     
     
     
     

      
  • 相关阅读:
    修改CentOS的yum源为国内yum镜像源
    CentOS7利用yum安装node.js
    Ansible系列(一):安装
    动态链接库引起的yum故障
    《C++ Templates: The Complete Guide》读书笔记
    Linux下编译clang、libcxx及其相关库——C++11环境搭建
    shell小工具:findstr 和 findfile
    关于newexpression、new operator、operator delete的总结
    Makefile编写示例:构建一个库
    无计划就不行动!
  • 原文地址:https://www.cnblogs.com/MouseCat/p/7266537.html
Copyright © 2011-2022 走看看