我有这样的行代码 -
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))
并且在整个代码中多次调用此递归方法,并且递归非常深。 有没有其他方法可以解决这样的问题?
如果可能,请尝试独立于语言。
答案 0 :(得分:1)
您可以使用装饰技术进行记忆:
def memoize(f):
memo = dict()
def wrapper(x):
if x not in memo:
memo[x] = f(x)
return memo[x]
return wrapper
@memoize
def someMethod(x):
return <your computations with x>
答案 1 :(得分:0)
正如我正确理解你的代码,你正在寻找某种记忆。
https://en.wikipedia.org/wiki/Memoization
这意味着在每次递归调用时,您必须尽可能地保存过去的计算,以便在当前计算中使用它。