zoukankan      html  css  js  c++  java
  • 递归回溯剪枝之斐波那契数列

    求斐波那契数列常用循环和递归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()

  • 相关阅读:
    FIS3常用配置
    PC端模拟移动端访问 字体大小限制
    table布局 防止table变形 td固定宽度
    fis3 scss 版本报错
    移动端布局方案 网易
    提示浏览器版本低
    JS Math.round()方法原理
    margin 负边距应用
    box-shadow IE8兼容处理
    border-radius IE8兼容处理
  • 原文地址:https://www.cnblogs.com/King-Tong/p/13473902.html
Copyright © 2011-2022 走看看