2013-05-27 4 views
-8

Независимо от того, что я делаю, я не могу понять это правильно.Fibonacci int [] sequence

Возврат int [] размера len, который имеет первое число Финоначчи len. Пример: n = 6, возврат {1,1,2,3,5,8}. (Предварительное условие: п> = 2)

fibonacci(3) → {1, 1, 2} 
fibonacci(6) → {1, 1, 2, 3, 5, 8} 
fibonacci(8) → {1, 1, 2, 3, 5, 8, 13, 21} 

вот что я сделал

if (n == 0) { 
    return 0; 
else if (n == 1) 
    return 1; 
else 
    return fibonnaci(n - 1) + fibonnaci(n - 2); 
+3

Итак, что именно вы сделали? – Keppil

+0

if (n == 0) { return 0; } else if (n == 1) { return 1; } else { return fibonnaci (n-1) + fibonnaci (n-2); – user2426406

+1

Да, этот код вернет каждый номер последовательности. Просто сохраните возвращенные результаты в массиве. – Renan

ответ

1
public static int[] FibLength(int l) 
{ 
    int fib[] = new int[l]; 
    fib[0] = 1; 
    fib[1] = 1; 

    for (int i=2; i<fib.length; i++) 
     fib[i] = fib[i-1] + fib[i-2]; 

    return fib; 
} 
1

итерационного версия:

public int[] sonOfBonacci(int n) { 
    int[] result = new int[n]; 
    result[0] = 1; 
    if (n > 1) { 
     result[1] = 1; 
     for (int j = 1; j < n - 1; j++) { 
      result[j + 1] = result[j - 1] + result[j]; 
     } 
    } 
    return result; 
} 
0

Использование больших чисел:

public static void main(String[] args) { 

    // Precalculate enough fibs 
    List<BigInteger> list = new ArrayList<BigInteger>(); 
    list.add(BigInteger.ONE); 
    list.add(BigInteger.ONE); 
    for (int i = 2; i < 512; i++) { 
     list.add(list.get(i - 2).add(list.get(i - 1))); 
    } 

    // Print first 10 
    for (int n = 2; n <= 10; n++) { 
     System.out.printf("fibonacci(%d)\t→\t%s%n", n, list.subList(0, n)); 
    } 

} 

Выход:

fibonacci(2) → [1, 1] 
fibonacci(3) → [1, 1, 2] 
fibonacci(4) → [1, 1, 2, 3] 
fibonacci(5) → [1, 1, 2, 3, 5] 
fibonacci(6) → [1, 1, 2, 3, 5, 8] 
fibonacci(7) → [1, 1, 2, 3, 5, 8, 13] 
fibonacci(8) → [1, 1, 2, 3, 5, 8, 13, 21] 
fibonacci(9) → [1, 1, 2, 3, 5, 8, 13, 21, 34] 
fibonacci(10) → [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]