-6

基本上,我想知道是否有更短的方法可以打印出 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 岁。但我确信有一种更快的方法可以做到这一点。如何?

4

7 回答 7

2

您可以使用循环。此示例使用 BigInteger,因为该数字很快变得对于long.

BigInteger a = BigInteger.ZERO, b = BigInteger.ONE;
System.out.println(1);
for (int i = 0; i < 100000; i++) {
    BigInteger c = a.add(b);
    System.out.println(c);
    a = b;
    b = c;
}

几秒钟后终于打印

420269270299515438 ...删除了很多很多数字... 9669707537501

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

于 2013-01-23T16:05:46.670 回答
0

以防万一您不想使用递归方式..
这是迭代...

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));
}
}   
于 2013-01-23T16:21:18.417 回答
0

好吧,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 );
    }
}
于 2013-09-20T03:28:55.630 回答
0

谷歌搜索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];
}
于 2013-01-23T16:00:39.957 回答
0

打印数字 < 100,n=11

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;
 }
}
于 2013-01-23T16:07:02.627 回答
0

执行此操作的标准方法是递归:

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

public static long fib(int a){
      if (a==1||a==2) return 1;
      else return fib(a-1)+fib(a-2);
    }
于 2013-01-23T15:59:40.823 回答
0

如果您必须在没有数组的情况下执行此操作,那么这里就是这样做的方法。只需将 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 + " ");
    }
}
于 2016-03-21T16:53:20.627 回答