使用替代方法的斐波那契系列不起作用

时间:2015-04-02 17:42:24

标签: recursion tail-recursion

我已经使用递归编写了一个简单的斐波纳契系列,如下所示。但是以下程序基于公式fib(n)=fib(n-1)+fib(n-2)

我们可以编写一个程序来取n的值,并使用公式fib(n+2)= fib(n)+fib(n+1)计算斐波那契数列。我们可以根据这个公式编写一个程序,将n作为输入。

 public class FibonacciClass{

  public static void main(String[] argv){

      for (int index=0; index < 7; index++){
          System.out.println("The Fibonacci series for the number "+index+" is " + fib(index));
      }

  }

  private static int fib(int n){
        if (n == 0 ) return 0;
        if (n <= 2 ) return 1;

      return (fib(n-1) + fib(n-2));
  }
}

如果我们可以使用递归来解决fib系列,请告诉我您为此编写程序的输入。

1 个答案:

答案 0 :(得分:1)

嗯,这听起来像是在试图回答家庭作业问题。但看起来你有合法的声誉:

定义 gib(n)= fib(n + 2)。 用它来代替fib(n)和fib(n + 1):

gib(n-2)= fib((n-2)+2)= fib(n)

gib(n-1)= fib((n-1)+2)= fib(n + 1)

所以原方程变为

fib(n + 2)= fib(n)+ fib(n + 1) - > gib(n)= gib(n-2)+ gib(n-1)

我们可以对此进行处理。我们必须在代码中进行类似的替换(n代表n + 2):

static unsigned int gib(int n)
{
  if (n <= -2) return 0;
  if (n == -1) return 1;
  return gib(n - 2) + gib(n - 1);
}

我没有包含导致负面fibonacci的负数(你的代码也会破坏它们)所以真的需要返回“unsigned int”。要修改为否定,请参阅here