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

    基础概念
    递归:在函数内部调用自身
    递归与迭代的相同:都是一种函数的不断循环,每循环一次,减少一次解决问题的规模
    不同:1.递归利用了栈的先进后出的概念,即将第一次运行的结果放入栈底,最后一次递归的结果放入栈顶,
    再根据需要依次从栈顶取结果进行运算
    2.递归:我们并不知道递归的次数,只需要规定递归结束的条件
    迭代:有一个确切的迭代次数,并且迭代完成自动停止


    递归 二分法
    1.必须有一个明确的结束条件
    2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用
    栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)




    #用循环实现阶乘
    # j = 1
    # n = int(input('n>>:'))
    # while n != 1:
    # j *= n
    # n -= 1
    # print(j)

    #用递归实现阶乘
    # def jiecheng(n):
    # if n == 1:
    # return n
    # return n*jiecheng(n-1)
    # print(jiecheng(5))

    #递归问年龄的问题
    # def age(n):
    # if n == 1:
    # return 10
    # else:
    # return age(n-1)+2
    #函数第一次的运行结果依赖第二次运行的结果,只有得到最后一次的运行结果,才能返回递归函数的结果


    #从以下列表中找到特定的某个值
    # 当列表无穷大时,使用循环占内存,使用迭代效率低,这时就可以使用递归函数,极大的提高查找效率
    data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

    def search(num,data):
    print(data)
    if len(data) > 1:
    if num > data[len(data)//2]:
    return search(num,data[len(data)//2:])
    elif num < data[len(data)//2]:
    return search(num,data[:len(data)//2])
    else:
    print('find')
    return '结果'
    else:
    if num == data[0]:
    print('find it')
    else:
    print('no exit')
    print(search(19,data))

    #若最后递归的结果要逐步往回返,函数每次递归的结果都要写return值,因为每次函数运行依赖下次运行的结果
    #若最后递归的结果正是函数想要的结果,则不需要写return值
  • 相关阅读:
    自适应兄弟元素一起增加高度
    replace小坑位一个
    word-wrap: break-word word-break: break-all;
    1473B. String LCM
    A. Special Permutation(水题)
    B. BerSU Ball(贪心)
    A. Regular Bracket Sequence(水题)
    B. Strange List(数学题)
    C. Move Brackets(水题)
    A. Flipping Game(暴力求法)
  • 原文地址:https://www.cnblogs.com/liuguniang/p/6715048.html
Copyright © 2011-2022 走看看