多次递归迭代
Posted
技术标签:
【中文标题】多次递归迭代【英文标题】:Multiple recursion to iteration 【发布时间】:2015-07-11 07:03:55 【问题描述】:我正在学习 Java,为了一个练习,我必须实现一个递归和迭代方法,返回以下正整数。
L(0) = 1
L(1) = 1
L(n) = L(n - 1) + L(n - 2) + 1 if n > 1
递归方法没问题。
public static int rec (int n)
if (n > 1)
return rec (n-1) + rec(n-2) + 1;
else
return 1;
我可以将简单的递归转换为迭代,反之亦然,但我不知道如何解决这个问题。你有什么建议吗?
编辑:感谢斐波那契数列的提示。我现在明白了:
public static int iter (int n)
int f0 = 1;
int f1 = 1;
int fn = 0;
if (n > 1)
for (int i = 1; i < n; i++)
fn = f0 + f1 + 1;
f0 = f1;
f1 = fn;
else
return 1;
return fn;
【问题讨论】:
您在谈论斐波那契数列。那里确实有很多东西。 @LuisLavieri:我没有发现他的问题有任何问题。这是一个有效的问题,如果有很多东西,你可以发布你的答案。那肯定会有所帮助:) @ANjaNA:他不是在问怎么做。如果你有任何提示,他要求给他任何提示! 哦,真的吗?***.com/questions/11091422/…if (n > 1) return rec (n-1) + rec(n-2) + 1;
斐波那契没有+1
【参考方案1】:
尝试简单地使用两个变量。
public static int rec1(int n)
int result=0;
int previous1=0;
int previous2=0;
int i=0;
while(i<=n)
if(i==0 || i==1)
result=1;
else
result= previous1 + previous2 + 1;
previous2=previous1;
previous1=result;
i++;
return result;
【讨论】:
【参考方案2】:这是我的版本
public static int modifiedFibonacci(int n)
if(n > 1)
int f1 = 0;
int f2 = 0;
int result = 0;
for (int i = 2; i <= n; i++)
result = f1 + f2 + 2;
f2 = f1;
f1 = result;
return ++result;
return 1;
【讨论】:
【参考方案3】:你为什么要为 fib +1?
0,1,1,2,3,5,8,11 如果我没记错的话,假设 n 大于 1,前 2 个数字的总和。
不应该是这样的:
int fib(int n)
if (n == 0)
return 0;
else if (n == 1)
return 1;
//base case
else
return fib(n-2)+fib(n-1);
如果代码不完美,我们深表歉意,但您应该明白这一点。
迭代方法的另一个答案很好,这只是用代码突出显示+1,不应该是公认的答案:)
【讨论】:
问题是它不是斐波那契。是修改版。但是,修改一个有效的斐波那契很容易......而且,他要求的是迭代解决方案。 @LuisLavieri,啊,我的错。我看到了递归的 n-2 + n-1 并立即去那个解决方案。以上是关于多次递归迭代的主要内容,如果未能解决你的问题,请参考以下文章