費波那西數列(Fibonacci)

費波那西是一個兔子生兔子的故事...關於內容的介紹可以參考這一篇閱讀(http://pansci.asia/archives/111546),這邊我們專注於如何使用演算法來實現我們預期的結果。

CodePen中包含Divide and Conquer(分治法)與Dynamic Programming(動態規劃),兩種方式來求解數列。

https://codepen.io/AllenShi/pen/JLeOyg?editors=1111

1.分治法進行運算

function FibonacciDC(n) {
  if (n == 0)
    return 0;
  if (n == 1)
    return 1;
  return Fibonacci(n - 1) + Fibonacci(n - 2);
}
data = FibonacciDC(4)
console.log('分治法版本:'+data)

2.動態規劃-遞迴版本

var map = [0,1]
function FibonacciRecursive(n) {
   if(typeof map[n] !== 'undefined') {
     return map[n];
   }
   map[n] = FibonacciRecursive(n-1) + FibonacciRecursive(n-2); 
   return map[n];
}
data = FibonacciRecursive(4)
console.log('遞迴版本:'+data)

3.動態規劃-迴圈版本

function Fibonacci(n) {
   // F(0) = 0, F(1) = 1 使用map給予固定的答案
   var map = [0,1]
   for (i = 2; i <= n; ++i){
      // 公式轉換
      map[i] = map[i - 1] + map[i - 2];
   }
   return map[n];
}
data = Fibonacci(4)
console.log('迴圈版本:'+data)

results matching ""

    No results matching ""