我想将这个多循环转换为递归。我理解递归,但我不知道如何写它。
'Number of loops : A, B, C, ..., (N)
For iA = 0 To Rest
Ax = A + iA
For iB = iA To Rest
Bx = B + iB
For iC = iB To Rest
Cx = C + iC
List.add ({Ax, Bx, Cx})
Next
Next
Next
所以,我希望预期的结果如下......
当,A = 10,B = 20,C = 30,Rest = 3
{10,20,30}, {10,20,31}, {10,20,32}, {10,20,33},
{10,21,31}, {10,21,32}, {10,21,33},
{10,22,32}, {10,22,33},
{10,23,33},
{11,21,31}, {11,21,32}, {11,21,33},
{11,22,32}, {11,22,33},
{11,23,33},
{12,22,32}, {12,22,33},
{12,23,33},
{13,23,33}
请帮帮我......
答案 0 :(得分:0)
我不太确定这是什么语言,但我想我无论如何都能提供完整的答案。这是将循环转换为递归的一般方法:
假设你有一个循环
For i = A to B
myfunc(i)
Next
您可以改为编写函数
recursive_function(int starting_value)
{
myfunc(starting_value)
If(starting_value != A)
return recursive_function(starting_value - 1);
else
return
}
然后调用recursive_function(B),而不是运行循环。这样递归函数调用myfunc(B),myfunc(B-1),...,myfunc(A)。
您可以通过以下两种方式之一轻松地根据您的情况调整此方法。第一种是像我一样编写几个递归函数,并用嵌套递归调用替换嵌套循环。一种可能更简单的方法是让递归函数获取参数A,B,C并使用它们进行下一次迭代。实际上这样做应该是非常有教育意义的,你应该自己做。
答案 1 :(得分:0)
假设VB:
Function RecursiveAdd(List, Rest, A, B, C, iA, iB, iC)
List.Add({A+iA, B+iB, C+iC})
if iC < Rest then RecursiveAdd(List, Rest, A, B, C, iA, iB, iC+1)
if iB < Rest then RecursiveAdd(List, Rest, A, B, C, iA, iB+1, 0)
if iA < Rest then RecursiveAdd(List, Rest, A, B, C, iA+1, 0, 0)
End Function
如果List
,Rest
,A
,B
和C
与RecursiveAdd
属于同一类,则可以简化此操作