【发布时间】:2013-08-19 02:03:06
【问题描述】:
我需要创建一个任意深度的嵌套循环。递归循环似乎是正确的方法,但我不知道如何在循环中使用循环变量。例如,一旦我将深度指定为 3,它应该像
count = 1
for i=1, Nmax-2
for j=i+1, Nmax-1
for k=j+1,Nmax
function(i,j,k,0,0,0,0....) // a function having Nmax arguments
count += 1
end
end
end
我想做一个以循环深度为参数的子程序。
更新:
我实施了 Zoltan 提出的方案。为了简单起见,我用python编写了它。
count = 0;
def f(CurrentDepth, ArgSoFar, MaxDepth, Nmax):
global count;
if CurrentDepth > MaxDepth:
count += 1;
print count, ArgSoFar;
else:
if CurrentDepth == 1:
for i in range(1, Nmax + 2 - MaxDepth):
NewArgs = ArgSoFar;
NewArgs[1-1] = i;
f(2, NewArgs, MaxDepth, Nmax);
else:
for i in range(ArgSoFar[CurrentDepth-1-1] + 1, Nmax + CurrentDepth - MaxDepth +1):
NewArgs = ArgSoFar;
NewArgs[CurrentDepth-1] = i;
f(CurrentDepth + 1, NewArgs, MaxDepth, Nmax);
f(1,[0,0,0,0,0],3,5)
结果是
1 [1, 2, 3, 0, 0]
2 [1, 2, 4, 0, 0]
3 [1, 2, 5, 0, 0]
4 [1, 3, 4, 0, 0]
5 [1, 3, 5, 0, 0]
6 [1, 4, 5, 0, 0]
7 [2, 3, 4, 0, 0]
8 [2, 3, 5, 0, 0]
9 [2, 4, 5, 0, 0]
10 [3, 4, 5, 0, 0]
可能有更好的方法来做到这一点,但到目前为止,这个方法工作正常。在 fortran 中执行此操作似乎很容易。非常感谢您的帮助!!!
【问题讨论】:
-
你能标记语言吗?使用 C++ 模板可能会派上用场。对于 Java,您可能应该使用列表。等等。
-
附言。我正在使用 fortran90。
标签: recursion fortran nested-loops