擅长:python、mysql、java
<p>首先,让我们重构一系列if语句,使递归函数更简单:</p>
<pre><code>def AcumulacionCelda(x,y):
d = {(-1, -1): 4,
(-1, 0) : 5,
(-1, 1) : 6,
(0, -1) : 3,
(0, 0) : 'dummy',
(0, 1) : 7,
(1, -1) : 2,
(1, 0) : 1,
(1, 1) : 8}
if Acum[x, y] == NoData:
Acum[x, y] = 1
for m, n in product(range(-1,2), range(-1,2)):
if Direcciones[x+m, y+n] == d[m, n]:
AcumulacionCelda(x+m, y+n)
Acum[x,y] += Acum[x+m, y+n]
</code></pre>
<p>现在要使函数迭代而不是递归,我们需要创建一个队列来存储我们需要部分挂起并在以后重新访问的各种状态和任务。我们不是递归调用,而是将要完成的任务附加到队列中,然后是用于“递归”计算的新任务,然后将<code>break</code>(或<code>continue</code>)附加到主循环的新迭代中。在</p>
^{pr2}$