【问题标题】:How to convert multi-loops to recursion如何将多循环转换为递归
【发布时间】:2011-05-30 04:02:58
【问题描述】:

我想将此多循环转换为递归。递归我懂,但不知道怎么写。

'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,休息=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

请帮帮我...

【问题讨论】:

    标签: .net loops recursion combinations


    【解决方案1】:

    我不太确定这是什么语言,但我想我无论如何都能提供完整的答案。这是将循环转换为递归的一般方法:

    假设你有一个循环

    
    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 并使用这些参数进行下一次迭代。实际上这样做应该很有指导意义,你应该自己做。

    【讨论】:

      【解决方案2】:

      假设 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
      

      如果 ListRestABC 是与 RecursiveAdd 相同类的成员,则可以简化此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 1970-01-01
        • 2012-12-29
        • 2013-10-23
        相关资源
        最近更新 更多