我总是在尝试转换我创建的递归算法时遇到问题,该算法返回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
然而,我似乎无法找出一种迭代方式,它确切地返回了递归的方式
答案 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;
}