动态规划和递归算法求解斐波那契数列的效率对比

动态规划有效的解决了递归算法的效率低下的问题,它剔除了递归中的重叠的子问题,对每个子问题只求解一次。

斐波那契数列格式为:1、1、2、3、5、8、13、21、34、......,
递归(状态转移)函数为 f[n]=f[n-1]+f[n-2]

采用递归求解:

#采用递归求解
def f_recu(n):
    assert isinstance(n,int),'必须输入一个整数'
    assert n>=1,'不能小于1'
    if n==1 or n==2:
        return 1
    return f_recu(n-1) + f_recu(n-2)
#测试,n=40 计算时间
%time f_recu(40)

输出:

Wall time: 48.4 s
102334155

采用动态规划求解:

#采用动态规划方法求解
def f_dyna(n):
    assert isinstance(n,int),'必须输入一个整数'
    assert n>=1,'不能小于1'
    if n == 1 or n==2:
        return 1
    else:
        pre_n_2 = 1
        pre_n_1 = 1
        for i in range(3,n+1):
            target_n = pre_n_2 + pre_n_1
            pre_n_1 = pre_n_2
            pre_n_2 = target_n
        return target_n
#测试,n=40 计算时间
%time f_dyna(40)

输出:

Wall time: 0 ns
102334155
发布了23 篇原创文章 · 获赞 1 · 访问量 3352

猜你喜欢

转载自blog.csdn.net/ABCDABCD321123/article/details/104338777