• 递归回溯剪枝之斐波那契数列


    求斐波那契数列常用循环和递归2种方式。

    通过剪枝优化,可以将递归的时间复杂度进行优化。

    可以对比以下三种算法。

    import time
    from matplotlib import pyplot

    #计时器
    def timer(func):
        def wrapper(*arg):
            start=time.time()
            func(*arg)
            end=time.time()
            elapsed_time=end-start
            return elapsed_time
        return wrapper

    @timer
    def fib_for(n):
        if n==1 or n==2:
        return 1
        a=1
        b=1
        for i in range(3,n+1):
            c=a+b
            a=b
            b=c
        return c

    #print(fib_for(30))

    @timer
    def fib_recursion(n):
        if n==1 or n==2:
            return 1
        return fib_recursion(n-1)+fib_recursion(n-2)


    visited={}
    @timer
    def fib_optimize(n):
        if n==1 or n==2:
            return 1
        if n in visited.keys():
            return visited[n]
        else:
            new_value=fib_optimize(n-1)+fib_optimize(n-2)
            visited[n]=new_value
        return new_value

    if __name__=="__main__":
        times=[]
        for i in range(1,31):
            times.append(fib_optimize(i))
        x=range(1,31)
        print(times)
        pyplot.plot(x,times)
        pyplot.show()

  • 相关阅读:
    记录JavaScript的util.js类库
    Shiro登录中遇到了问题
    【转载】JavaScript导出Excel
    react-router
    react 表单
    html5定位getLocation()
    html5存储方式localstorage和sessionStorage
    position导致Safari工具栏不自动隐藏
    input type="datetime-local" 时placeholder不显示
    vuex(1.0版本写法)
  • 原文地址:https://www.cnblogs.com/King-Tong/p/13473902.html
Copyright © 2020-2023  润新知