JAVA:有没有一种打印斐波那契数的较短方法?

JAVA:有没有一种打印斐波那契数的较短方法?,java,arrays,numbers,sequence,fibonacci,Java,Arrays,Numbers,Sequence,Fibonacci,基本上,我想知道是否有一种打印0-100之间斐波那契数的较短方法 我所做的可能非常基本,但代码如下: public static void main(String[] args) { int number[] = new int[100]; number[0] = 0; number[1] = 1; int sum1 = number[0] + number[0]; int sum2 = sum1 + number[1]; int sum3

基本上,我想知道是否有一种打印0-100之间斐波那契数的较短方法

我所做的可能非常基本,但代码如下:

public static void main(String[] args) {

    int number[] = new int[100];

    number[0] = 0;
    number[1] = 1;

    int sum1 = number[0] + number[0];
    int sum2 = sum1 + number[1];
    int sum3 = sum1 + sum2;
    int sum4 = sum2 + sum3;
    int sum5 = sum3 + sum4;
    int sum6 = sum4 + sum5;

    System.out.println(sum1);
    System.out.println(sum2);
    System.out.println(sum3);
    System.out.println(sum4);
    System.out.println(sum5);
    System.out.println(sum6);

}

我会一直干到100岁。但我相信有一种更快的方法。如何实现?

实现这一点的标准方法是递归:

看一下这个简单的代码段,它在位置a返回斐波那契数:

public static long fib(int a){
      if (a==1||a==2) return 1;
      else return fib(a-1)+fib(a-2);
    }

谷歌搜索ftw!。。。甚至连一分钟的搜索都没有

int[] fibonacci = new int[25+1];
fibonacci[1] = 1;
fibonacci[2] = 1;
for ( int i = 3; i < fibonacci.length; i++ )
{
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
}

你可以使用循环。本例使用BigInteger,因为该数字很快就会变得太大

几秒钟后终于打印出来了

420269270299515438。。。很多很多数字被删除了。。。9669707537501


注意:您不需要记住前面的所有值,只需记住最后两个值。

使用n=11打印编号<100

public int getFib(int n){
  if(n==0) return 0;
  else if(n==1) return 1;
 else{
 int temp=getFib(n-1)+getFib(n-2);
 return temp;
 }
}

以防你不想使用递归的方式。。 这里是迭代的

public class Fib2 {

public static int fib(int n, int a, int b)
{
if (n==0)
    {
System.out.print("1x +");
    return a;
    }
else
    {
System.out.print("2x +");
    return fib(n-1,b,a+b);
    }
}
public static void main(String arg[])
{
System.out.println(fib(0,1,1));
}
}   

100不是斐波那契数,但是如果我们包括144,那么这是一个很好的简洁的例子:

class F
{
    public static void main( final String[] a )
    {
        int a = 1, b = 1;
        for ( ; b < 145; a = b + (b = a) )
            System.out.println( b );
    }
}

如果您必须在没有阵列的情况下执行此操作,那么下面是一种方法。把20换成100。这是我做作业的方式,对于那些仍在学习的人来说很容易理解

public static void main(String[] args)
{
    int number1 = 1;
    int number2 = 1;
    int count;
    int fib;
    System.out.print(number1 + " " + number2 + " ");
    for(count = 3; count <= 20; count++)
    {
        fib = number1 + number2;
        number1 = number2;
        number2 = fib;
        System.out.print(fib + " ");
    }
}

你听说过谷歌吗?定义更短的:代码长度还是运行时?谷歌发现,例如:你需要学习的是你的编码方式。似乎更快捷的方法是用笔和纸来计算。在Java中,调用的次数等于答案,使这变得简单,但是解决方法非常慢。你能用这种方法告诉我第10000000个斐波那契数吗?使用记忆法可以获得一个有效的解决方法。@extremecorders-记忆法只有在重复调用同一个操作时才有用。在这种情况下,它将把执行时间减少一半,而代价是内存不足。除了用于处理递归的堆栈上框架之外,因为这不是编写的尾部调用优化。@Peter-我相信您使用的是您发布的解决方案,而不是递归解决方案。我希望搜索很快,评论中至少已经发布了4个实现。有一些明确的方法可以做到这一点,但它非常复杂,因此递归实现更容易。您可能应该了解它是什么,以及它与其他实现的区别。
public static void main(String[] args)
{
    int number1 = 1;
    int number2 = 1;
    int count;
    int fib;
    System.out.print(number1 + " " + number2 + " ");
    for(count = 3; count <= 20; count++)
    {
        fib = number1 + number2;
        number1 = number2;
        number2 = fib;
        System.out.print(fib + " ");
    }
}