动态规划有效的解决了递归算法的效率低下的问题,它剔除了递归中的重叠的子问题,对每个子问题只求解一次。
斐波那契数列格式为: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
来源:CSDN
作者:吃了只鸡
链接:https://blog.csdn.net/ABCDABCD321123/article/details/104338777