计算斐波那契数列的时候, 自己的demo可能会受限代码迭代的深度和算法的复杂度,连第50位都要算很久,可以考虑将前面已经计算过的值存起来, 方便下次直接用,或许能一定程度的减少程序的运行时间和有压力,本人菜鸟一个, 直接上代码:
# import sys
# sys.setrecursionlimit(1000000)
sto = {}
from time import time
def print_execute_time(func):
def wrapper(*args, **kwargs):
start = time()
func_return = func(*args, **kwargs)
end = time()
print(f'{func.__name__}() execute time: {end - start}s')
# 返回func的返回值
return func_return
return wrapper
@print_execute_time
def feobo_sto(n):
global sto
if n <= 1:
if sto.get(n):
return sto[n]
else:
sto[n] = n
return sto[n]
else:
if sto.get(n):
return sto[n]
else:
c = feobo_sto(n-1) + feobo_sto(n-2)
sto[n] = c
return feobo_sto(n-1) + feobo_sto(n-2)
all_start = time()
print(feobo_sto(100))
all_end = time()
print("总用时:",all_end-all_start)
结果:
很轻松的计算出 第100 是什么了, 假如要计算 更大的,需要把默认的迭代深度调高, python 里默认的是900多,
# import sys
# sys.setrecursionlimit(1000000)
这两句就是调迭代深度的,
然后计算第1000位也很轻送, 但是再大点, 就报“Process finished with exit code -1073741571 (0xC00000FD)” 栈溢出了, 这个问题, 再查查看吧,就先记录那么多;
·····················································内容可能有点垃圾,但我只想提供一点思路,为代码世界做贡献