1 package interview; 2 //有一個斐波那契數列計算的函數,最前面的k個數為1,後面的沒一位是前k位之和,例如k=4,該函數 3 //該函數返回值為1,1,1,1,4,7,13,25,49 4 public class RecursiveOptimize { 5 static int fib_k(int n,int k) { 6 if(n<k) 7 return 1; 8 int result = 0; 9 for(int i=0;i<k;i++){ 10 result += fib_k(n-i-1,k); 11 } 12 return result; 13 } 14 static int fib_k_optimize(int n,int k) { 15 if(n<k) 16 return 1; 17 int[] fib = new int[n+1]; 18 for(int i=0;i<k;i++){ 19 fib[i]=1; 20 } 21 for(int i=k;i<=n;i++) { 22 int result = 0; 23 for(int j=0;j<k;j++){ 24 result += fib[i-j-1]; 25 } 26 fib[i]=result; 27 } 28 return fib[n]; 29 } 30 public static void main(String[] args) { 31 long start = System.nanoTime(); 32 for(int i=0;i<20;i++){ 33 System.out.print(fib_k(i,4)+" "); 34 } 35 long end = System.nanoTime(); 36 System.out.println("\n"+(end-start)); 37 38 //=================================== 39 start = System.nanoTime(); 40 for(int i=0;i<20;i++){ 41 System.out.print(fib_k_optimize(i,4)+" "); 42 } 43 end = System.nanoTime(); 44 System.out.println("\n"+(end-start)); 45 } 46 47 }