zoukankan      html  css  js  c++  java
  • 递归与二分法

    一、递归的定义

    递归调用是函数嵌套调用的一种特殊形式,在函数调用时,直接或间接的调用了它本身,就是递归调用。

    直接调用函数本身

    def f1():

        print('from f1')

        f1()

    f1()

    间接调用函数本身

    def f1():

        print('from f1')

        f2()

    def f2():

        print('from f2')

        f1()

    f2()

    递归最大深度的修改

    import sys

    sys.getrecursionlimit()   #默认深度1000左右

    sys.getrecursionlimit(2000)

    def f1(n):

        print('from f1',n)

        f1(n+1)

    f1(1)   #无限制递归调用毫无意义

    二、递归调用的两个明确阶段:递推、回溯

    回溯就是从外向里一层一层递归调用下去,回溯必须要有一个明确的结束条件

    递推就是从里向外一层一层结束递归

    def salary(n):

        if n == 1:

            return 100

        return salary(n-1)+300

    print(salary(5))

    三、二分法

    想从一个从小到大排列的列表中找到指定的数字,遍历的效率太低了,用二分法可以极大的缩小问题规模

    def search(n,l):
        print(l)
        if len(l)==0:
            print('not exist')
            return
        mid_index=len(l)//2
        if n > l[mid_index]:
            l=l[mid_index+1:]
            search(n,l)
        elif n < l[mid_index]:
            l=l[:mid_index]
            search(n,l)
        else:
            print('got it')
    search(n,l)
    
    
    
    
    




  • 相关阅读:
    java源码--ArrayList
    java源码--AbstractList
    java中public protected friendly private作用域
    设置springmvc全局异常
    Java
    Java
    Java
    Java
    Java
    Java
  • 原文地址:https://www.cnblogs.com/yaozhiyuan/p/9183120.html
Copyright © 2011-2022 走看看