【问题标题】:Converting a recursive function that return 2 recursion to Iteration将返回 2 个递归的递归函数转换为迭代
【发布时间】:2017-03-24 01:28:27
【问题描述】:

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

很容易追溯每个递归调用的作用,但将它们转换为迭代有点令人困惑。

例如这个递归函数

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

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

当我试图通过产生后续过程的递归时,这是相当直截了当的

序列(6) = 序列(4) + 序列(5)

序列(5) = 序列(3) + 序列(4)

序列(4) = 序列(2) + 序列(3)

序列(3) = 序列(1) + 序列(2)

SEQ(2) = 2

序列(3) = 3 + 2 = 5

SEQ(4) = 2 + 5 = 7

序列(5) = 5 + 7 = 12

SEQ(6) = 7 + 12 = 19

但是,我似乎无法找出一种迭代方式来准确返回递归的方式

【问题讨论】:

  • 算法与示例不太匹配。你是说最后一行的return SEQ(n-2) + SEQ(n-1) 吗?
  • 抱歉,错字。
  • 除了起始值之外,它的构建方式与斐波那契数列相同。您找到的任何迭代程序都很容易修改。

标签: algorithm recursion iteration


【解决方案1】:

您在 C# 中的 iteration 方法可能如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2015-05-30
    • 2014-03-01
    相关资源
    最近更新 更多