运用递归和非递归算法实现斐波那契数列,并分析两种算法的时间复杂度
斐波那契数列
算法实现
def fun_1(n): #递归实现
if(n==0):
return 0
elif(n==1):
return 1
else:
return fun_1(n-1)+fun_1(n-2)
def fun_2(n): #非递归实现
if(n==0):
return 0
else:
a,b,result=1,0,1
for i in range(1,n,1):
result=a+b
b=a
a=result
return result
def main():
num = eval(input("请输入一个自然数:"))
print("F({}) = {}".format(num,fun_1(num)))
print("F({}) = {}".format(num,fun_2(num)))
main()
时间复杂度分析
1:
使用递归实现更易懂,但算法运行效率较低。对于时间复杂度的分析:F(n)需要计算F(n-1),F(n-2),F(n-1)需要计算出F(n-2),F(n-3),以此类推,直到到达递归出口F(0)和F(1),从F(n),F(n-1),F(n-2)…F(2), T(n)=22…*2=2^(n-1) 保留最高项系数变为1,时间复杂度为O(2ⁿ)。
2:
上述非递归实现的算法思想是:F(0)=0,F(1)=1,为特例,其他均符合F(n)=F(n-1)+F(n-2),用a表示F(n-1),b表示F(n-2),当n非0或1时,循环依次计算,F(2),F(3)…直到F(n)跳出循环得到结果。T(n)=n-1 忽略常数项,时间复杂度为O(n)。