多次递归迭代

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 &gt; 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 并立即去那个解决方案。

以上是关于多次递归迭代的主要内容,如果未能解决你的问题,请参考以下文章

python中的函数递归和迭代问题

C#旋转数组递归(左,右)多次

遗传算法中比赛选择的多次迭代

防止递归 CTE 多次访问节点

多次迭代内存不足

Spark迭代算法UDF在每次迭代中被多次触发