2013-01-23 43 views
-6

基本上,我想知道是否有從0打印出Fibonacci數較短的方式 - 100JAVA:打印斐波那契數字的方法是否較短?

我所做的可能是非常基本的,但這裏是代碼:

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歲。但我確信有一個更快的方法來做到這一點。怎麼樣?

+1

你有沒有聽說過Google? –

+0

定義較短:代碼長度或運行時間?谷歌創建了例如 –

+0

這:http://introcs.cs.princeton.edu/java/23recursion/Fibonacci.java.html – MrSmith42

回答

0

標準的方式來做到這一點是遞歸:

看一看這個簡單的代碼片段,它會返回在位置的斐波那契數:

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

在Java中,調用的數量等於答案,使其成爲一個簡單但很慢的解決方案。 –

+0

此代碼不會打印任何內容。 –

+2

你能告訴我這種第10,000,000個斐波納契數嗎? – parsifal

0

谷歌搜索FTW ... WASN」 t甚至一分鐘搜索

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]; 
} 
+0

我希望搜索很快,至少有4個實現已經發布在評論中。 –

+0

有一些明確的方法來做到這一點,但它很複雜,所以它更容易做到 –

2

您可以使用循環。此示例使用BigInteger,因爲該數字很快變得太大而不適用於long。幾秒鐘終於

420269270299515438 ...很多很多的數字刪除後

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; 
} 

打印... 9669707537501

注意:你不需要記住所有的先前值,只是最後兩個。

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; 
} 
} 
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)); 
} 
} 
+0

您應該瞭解[遞歸](http://en.wikipedia.org/wiki/Recursion_%28computer_science%29)是什麼,以及它與[迭代](http://en.wikipedia.org/wiki/Iteration#Computing)的區別。 – parsifal

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); 
    } 
} 
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 + " "); 
    } 
}