将返回2递归的递归函数转换为迭代

时间:2016-11-10 05:25:16

标签: algorithm recursion iteration

我总是在尝试转换我创建的递归算法时遇到问题,该算法返回2个递归调用,直到满足基本情况。

很容易想要跟踪每个递归调用的内容,但将它们转换为迭代有点令人困惑。

例如这个递归函数

BEGIN SEQ(n)
   if (n == 1)
     return 3;

  else if (n == 2)
     return 2;

  else 
     return SEQ(n - 2) + SEQ(n - 1)

当我尝试通过递归生成后续过程时,这是相当直接的

  

SEQ(6)= SEQ(4)+ SEQ(5)

     

SEQ(5)= SEQ(3)+ SEQ(4)

     

SEQ(4)= SEQ(2)+ SEQ(3)

     

SEQ(3)= SEQ(1)+ SEQ(2)

     

SEQ(2)= 2

     

...

     

SEQ(3)= 3 + 2 = 5

     

SEQ(4)= 2 + 5 = 7

     

SEQ(5)= 5 + 7 = 12

     

SEQ(6)= 7 + 12 = 19

然而,我似乎无法找出一种迭代方式,它确切地返回了递归的方式

1 个答案:

答案 0 :(得分:4)

C#中的迭代方法可能如下所示:

public static int SEQ(int n)
{
    if (n == 1)
    {
        return 3;
    }

    if (n == 2)
    {
        return 2;
    }
    var first = 3;
    var second = 2;

    for (var i = 3; i <= n; i++)
    {
        second += first;
        first = second - first;
    }


    return second;
}