我对 Python 还很陌生,但我遇到了这个挑战,要递归地创建一个斐波那契生成器,让我开始学习这门语言。问题是,如果我发现超过 3226/3227 个斐波那契数,Python 就会崩溃。(Python 3)
注意:我在 PHP、JavaScript、VBA 和 Java 中做了很多编程,但我对 Python 完全陌生。因此,如果这只是数据类型错误之类的问题,我真的很抱歉。
import sys
sys.setrecursionlimit(1000000000)
cache = dict()
def fibonacci(n, arr = False):
global cache
if n == 0 or n == 1:
r = n
else:
nVal1 = n - 1
nVal2 = n - 2
if (not nVal1 in cache):
num1 = cache[nVal1] = fibonacci(nVal1, arr)
else:
num1 = cache[nVal1]
if (not nVal2 in cache):
num2 = cache[nVal2] = fibonacci(nVal2)
else:
num2 = cache[nVal2]
r = num1 + num2
if arr != False:
arr.append(r)
return r
fib = list()
# 3227 is max without generating a list.
# 3226 is max when generating a list.
fibonacci(3226, fib)
for x in fib: print(x)
我能做些什么让它比这更进一步?我不认为它已经耗尽内存,因为它在我的慢速 i3 笔记本电脑上运行大约两秒钟..