【问题标题】: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:他不是在问怎么做。如果你有任何提示,他要求给他任何提示!
  • if (n &gt; 1) { return rec (n-1) + rec(n-2) + 1; } 斐波那契没有+1

标签: java algorithm recursion iteration


【解决方案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 并立即去那个解决方案。
      猜你喜欢
      • 2015-05-18
      • 2012-10-17
      • 2019-12-10
      • 2023-01-17
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多