【发布时间】:2016-08-25 04:33:46
【问题描述】:
我想用 O(1) 空间写一个自下而上的斐波那契。我的问题是 python 的递归堆栈限制了我测试大量数据。有人可以提供替代或优化我所拥有的吗?这是我的代码:
def fib_in_place(n):
def fibo(f2, f1, i):
if i < 1:
return f2
else:
return fibo(f1, f2+f1, i -1)
return fibo(0, 1, n)
【问题讨论】:
-
是否需要递归编写它?
-
您的代码实际上看起来很合理(臃肿,但不是每次调用两次递归调用的幼稚版本)。我们在这里谈论的数字有多大?您是否遇到了 1000 的默认递归限制?
-
您在这里使用了 O(n) 堆栈空间。如果 Python 有尾调用消除,这将只是 O(1) 空间。 (实际上,无论如何它都不会是 O(1) 空间,因为整数占用恒定空间的假设几乎立即失效,但该问题已包含在问题定义中。您无法真正解决这个问题。)跨度>
-
如果你想要 O(1) 空间,我会选择使用生成器
-
fib_in_place(100)在我的机器上立即生成 354224848179261915075 的结果。你的机器上发生了什么?
标签: python recursion fibonacci