回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我如何将这个递归函数转换并优化为迭代函数呢。我正在尝试编程一个函数,它使用方向图来累积流,但是,对于非常大的方向图,这个函数就会崩溃。我用Python编程,增加系统递归限制不是一个选择。在</p>
<pre><code>def AcumulacionCelda(x,y):
if Acum[x,y]==NoData:
Acum[x,y]=1
for m, n in product(range(-1,2), range(-1,2)):
if m==-1 and n==-1 and Direcciones[x+m,y+n]==4:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==-1 and n==0 and Direcciones[x+m,y+n]==5:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==-1 and n==1 and Direcciones[x+m,y+n]==6:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==0 and n==1 and Direcciones[x+m,y+n]==7:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==1 and n==1 and Direcciones[x+m,y+n]==8:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==1 and n==0 and Direcciones[x+m,y+n]==1:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==1 and n==-1 and Direcciones[x+m,y+n]==2:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
elif m==0 and n==-1 and Direcciones[x+m,y+n]==3:
AcumulacionCelda(x+m,y+n)
Acum[x,y]=Acum[x,y]+Acum[x+m,y+n]
return;
for i, j in product(range(1,Filas-1), range(1,Columnas-1)):
AcumulacionCelda(i,j)
</code></pre>