很好地遇到了斐波那契更大的兄弟,AKA Tribonacci。
它基本上像斐波納契同樣,可是將序列的最後3個(而不是2個)數相加以生成下一個。
因此,若是咱們要以開始[1, 1, 1]輸入開始咱們的Tribonacci序列,咱們有這樣的序列:java
[1, 1 ,1, 3, 5, 9, 17, 31, ...]
咱們將開始修改與於[0, 0, 1]以下:數組
[0, 0, 1, 1, 2, 4, 7, 13, 24, ...]
你須要建立一個給出數組/列表的斐波納契函數,返回前n個元素 - 包含全部序列。
入參的數組始終包含3個數字; n將始終爲非負數; if n == 0,而後返回一個空數組。
同時須要注意的0<n<3
的狀況。函數
public double[] tribonacci(double[] s, int n) { double[] b = new double[n]; // 若是長度小於3,則遍歷傳入的數據並返回對應的長度數組 if (n < 3) { for (int i = 0; i < n; i++) { b[i] = s[i]; } return b; } // 先把傳遞過來的前三位放到新數組中 if (s != null && s.length > 0) { for (int i = 0; i < s.length; i++) { b[i] = s[i]; } // 遍歷並放入長度減去3的數值放到新數組中 for (int i = s.length; i < n; i++) { double first = b[i - 3]; double second = b[i - 2]; double thrid = b[i - 1]; b[i] = (first + second + thrid); } } return b; }
1.code
import java.util.Arrays; public class Xbonacci { public double[] tribonacci(double[] s, int n) { double[] tritab=Arrays.copyOf(s, n); for(int i=3;i<n;i++){ tritab[i]=tritab[i-1]+tritab[i-2]+tritab[i-3]; } return tritab; } }
2.ci
import java.util.Arrays; public class Xbonacci { public double[] tribonacci(double[] s, int n) { double[] tritab=Arrays.copyOf(s, n); for(int i=3;i<n;i++){ tritab[i]=tritab[i-1]+tritab[i-2]+tritab[i-3]; } return tritab; } }
3.get
public class Xbonacci { public double[] tribonacci(double[] s, int n) { // hackonacci me if( n == 0 ) return new double[0]; double[] res = new double[n]; for( int i = 0; i < n; i++ ) { if( i < 3 ) res[i] = s[i]; else res[i] = res[i-1]+res[i-2]+res[i-3]; } return res; } }