很容易就可以得到遞推公式的斐波那契數列的遞歸解法,但是又沒有考慮過,遞歸雖然酷,但是效率呢?
int RecursiveFib(int n){
if(n==0) return 0;
if(n==1) return 1;
return RecursiveFib(n-1)+RecursiveFib(n-2);
}
這樣的函數會調用巨多次,你會發現算到100根本就算不動了!於是是不是應該記下之前算過的解呢,那麼每個N對應的Fib數是一定的,我們可以採用鍵值對的方式儲存,那麼這樣子,就不會幹重複的事情了,這也相當於我們手算時的思路!import java.util.HashMap;
public class EffectiveFibonnacci {
HashMap<Integer, Integer> map;
EffectiveFibonnacci(){
map = new HashMap<Integer,Integer>();
map.put(0, 0);
map.put(1, 1);
}
int RecursiveFib(int n){
if(n==0) return 0;
if(n==1) return 1;
return RecursiveFib(n-1)+RecursiveFib(n-2);
}
int EffectiveFib(int n){
for(int i = 2;i <= n; i++){
map.put(i, map.get(i-1)+map.get(i-2));
}
return map.get(n);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
EffectiveFibonnacci xx = new EffectiveFibonnacci();
// System.out.println(xx.RecursiveFib(100));
System.out.println(xx.EffectiveFib(40));
}
}