【发布时间】:2016-02-10 00:34:33
【问题描述】:
我有这样的行代码 -
while someMethod(n) < length and List[someMethod(n)] == 0:
# do something
n += 1
其中someMethod(arg) 对数字n 进行了一些计算。这段代码的问题是我要执行两次相同的计算,这是我需要避免的。
一种选择是这样做 -
x = someMethod(n)
while x < length and List[x] == 0:
# do something
x = someMethod(n + 1)
我将someMethod(n) 的值存储在变量x 中,然后再使用它。然而,这种方法的问题是代码在一个被多次调用的递归方法中。因此,会创建大量变量 x 的多余实例,这会减慢代码速度。
这是代码的片段 -
def recursion(x, n, i):
while someMethod(n) < length and List[someMethod(n)] == 0:
# do something
n += 1
# some condition
recursion(x - 1, n, someList(i + 1))
而且这个递归方法在整个代码中被调用了很多次,而且递归的深度很深。 有没有其他方法可以解决这样的问题?
如果可能,请尽量独立于语言。
【问题讨论】:
-
堆栈上的 int 不会减慢任何速度,在 Java 中,不在 C 中,在 C++ 中,在 FORTRAN 中,不在 Pascal 中,在 ALGOL 60 中,不在...
-
如果没有 完整的 示例,很难理解这一点……尤其是声称“正在创建变量
x的过多实例,这会减慢代码速度”真的需要更多的理由...... -
好的。我将编辑问题。
-
我已经编辑了这个问题。仍然很难证明我的代码是正确的,因为它非常复杂。希望新的编辑有所帮助。
-
如果你想要一个独立于语言的答案,你为什么用 python 标记它? (如果其他人添加了该标签,也许您应该回滚该编辑)。
标签: python optimization dynamic-programming memoization