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

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

斐波那契数列格式为: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值