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()

  • 相关阅读:
    c语言数组指针
    (4)activiti工作流引擎之uel表达式
    (3)activiti流程的挂起和激活
    (2)java程序走一遍工作流activiti
    (1)activiti认识以及数据库和插件配置
    linux 下路由配置
    lvs-dr+keepalived
    LVS-DR 配置测试
    简单认识TCP/IP协议
    mysql 主从同步-读写分离
  • 原文地址:https://www.cnblogs.com/King-Tong/p/13473902.html
Copyright © 2011-2022 走看看