如何将多循环转换为递归

时间:2011-05-30 04:02:59

标签: .net loops recursion combinations

我想将这个多循环转换为递归。我理解递归,但我不知道如何写它。

'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

理想值如下。

Ax,Bx,Cx

{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}


总计数= 20

请帮帮我......

2 个答案:

答案 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

如果ListRestABCRecursiveAdd属于同一类,则可以简化此操作