zoukankan      html  css  js  c++  java
  • Python初学者第二十天 函数(3)-递归函数及练习题

    20day

    1、递归的返回值:

    递归返回值

    2、递归的特性:

    a、必须有一个明确的结束条件

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

    c、递归效率不高,递归层次过多会导致栈溢出

    3、递归练习题:

    3.1 如何从一个有序列表的1000个元素里面找到674这个元素的索引

    data = [1,3,5,9,10,25,27,39.........674,698................]

    分析:

    1、将列表从中间的位置分为2个部分;

    2、找到列表的中间位置的值,若此值小于674,说明674在后面的那一部分。若大于674,说明在前面那一部分;

    3、递归列表,重复将列表从中间位置分为2个部分,直到中间位置的值等于674,返回它的索引;

    #列表中找到其中一个值,并返回其索引
    seq = [1,2,4,5,9,8,10,24,27]

    seq.sort() #先将列表重新排序,得到一个有序的列表
    def search(seq,n,lower,upper): #seq列表,n要找的数据,lower列表的索引下限,upper索引上限
    middle = (lower + upper)//2 #找到列表的中间位置
    if n > seq[middle]: #找到列表的中间位置的值,对比n,若比n小。则在中间位置后面找,如n为60,中间为50,则在50+后面找
    return search(seq,n,middle+1,upper) #递归search,将结果返回再找一次
    elif n < seq[middle]: #找到列表的中间位置的值,对比n,若比n大。则在中间位置前面找,如n为20,中间为50,则在50前面找
    return search(seq,n,lower,middle)
    else: #当n等于中间值的时候,即已找到该元素,返回其索引值即可
    return middle
    print(search(seq,5,0,8)
  • 相关阅读:
    甲醛(Formaldehyde)
    Node Embedding
    受限玻尔兹曼机(RBM, Restricted Boltzmann machines)和深度信念网络(DBN, Deep Belief Networks)
    长尾分布,重尾分布(Heavy-tailed Distribution)
    SVD分解与数据压缩
    Batch Normailzation
    Attention Mechanism
    新装的Ubuntu在Nvidia显卡上分辨率不对
    人工神经网络(Artificial Neural Network)
    Xdebug+phpstorm配置
  • 原文地址:https://www.cnblogs.com/fany-mok/p/8344056.html
Copyright © 2011-2022 走看看