2016-04-03 74 views
3

我正在寫一個無效函數fibFill,它用斐波那契數字填充一個數組。它不需要返回任何東西。Java如何返回從1開始的斐波那契數組?

這是我迄今爲止:

void fibFill(int[] fibo) { 
    fibo[0] = 1; 
    fibo[1] = 1; 
    for (int i = 2; i < fibo.length; i++) { 
     fibo[i] = fibo[i - 1] + fibo[i - 2]; 
    } 
    int pos(int position) { 
     return fibo[pos]; 
    } 
} 

例如,如果我通過長度爲5的陣列的方法,它將覆蓋傳遞的數組的內容是這樣的:[1, 1, 2, 3, 5]

+0

我沒有看到這個代碼的任何問題 – Maljam

+2

如果'fibo'太小,這個函數將拋出。 – HuStmpHrrr

+0

爲什麼不使用ArrayList? – Laurel

回答

4

您的fibFill方法不應該有嵌入其中的pos方法;我會讓它static(因此它可以被稱爲沒有一個實例),像

static void fibFill(int[] fibo) { 
    fibo[0] = 1; 
    fibo[1] = 1; 
    for (int i = 2; i < fibo.length; i++) { 
     fibo[i] = fibo[i - 1] + fibo[i - 2]; 
    } 
} 

然後你就可以用類似

public static void main(String[] args) { 
    int[] fib = new int[10]; 
    fibFill(fib); 
    System.out.println(Arrays.toString(fib)); 
} 

,輸出測試它(的要求)斐波那契值開始在1

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 
1

固定:

static void fibFill(int [] fibo) { 
if(fibo.length==0) return; 
if(fibo.length==1) 
    { 
     fibo[0]=1; 
     return; 
    } 
fibo[0] = 1; 
fibo[1] = 1; 
for (int i = 2;i < fibo.length; i++) 
    { 
     fibo[i]=fibo[i-1]+fibo[i-2]; 
    } 
} 

//there is no need for pos, as you can get it by type fibo[index] 

請注意,這個解決方案花費你O(n),你也可以通過公式直接做到這一點,也有更多的方法來計算斐波納契。欲瞭解更多信息: five ways to calculate fibonacci

+0

這種方法對於一個0元素的數組將失敗。 – EJP