比较非递归与递归时间复杂度(斐波拉契为例)

该博客通过对比递归与非递归方式实现斐波拉契数列,展示了递归在数据量增大时性能急剧下降的问题。实验结果显示,递归方法的时间消耗呈指数增长,不适用于大数据计算,而非递归方法虽然代码复杂,但时间复杂度更低,适合处理大数据。因此,在实际开发中应根据数据规模选择合适的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本思路:以递归与非递归实现斐波拉契数列,用timeit记录时间,然后绘制图像分析。

参考代码:

from timeit import Timer
from matplotlib import pyplot as plt

#递归
def func1(n):
    
    if n==0:
        return 0
    if n==1:
        return 1
    return func1(n-1)+func1(n-2)
# 非递归
def func2(n):
    
    if n==0:
        return 0
    if n==1:
        return 1
    a = 0
    b = 1
    for i in range(2, n):
        t = b
        b = a + b
        a = t
    return b
n=eval(input())
print(func1(n-1))
print(func2(n))

#测试消耗时间
Time1=[]
Time2=[]
for i in range(0,33):
    t1 = Timer(stmt="func1(%d)" % i, setup="from __main__ import func1")
    t2 = Timer(stmt="func2(%d)" % i, setup="from __main__ import func2")
    Time1.append(t1.timeit(10))
    Time2.append(t2.timeit(10))
plt.title("digui_func1 and feidihui_func2")
plt.xlabel("n")
plt.ylabel("time")
plt.plot(list(range(0,33)),Time1,'ro')
plt.plot(list(range(0,33)),Time2,'bo')
plt.legend(["digui_func1","feidigui_func2"])
plt.show()

实验结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUUcuNw==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUUcuNw==,size_20,color_FFFFFF,t_70,g_se,x_16 

 实验结论:

从得出图像可以看出递归的消耗时间是呈指数级别增长的,时间复杂度较大,但代码少,以较易理解,在数据少的情况下可以使用递归,如果数据庞大,递归就相当费时间了,就不建议使用递归。而非递归的时间复杂度比递归少很多,可以对较大的数据的实现,缺点在于代码不易于理解,代码量很大。在实际开发中,要根据数据量判断是否使用递归和非递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QG.7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值