フィボナッチ数列
F(1) = 1
F(2) = 1
F(3) = 2 = 1+1
F(4) = 3 = 1+2
F(5) = 5 = 2+3
という感じで、1と2は例外で>2の時はF(n-1)-F(n-2)の値となる数列
上の式からそのまま導くと以下のような感じ。
F(n-1)とF(n-2)は途中で同じ計算をやってるので、毎回やるのはもったいないからキャッシュしてみる。
メモ化というらしい
F(2) = 1
F(3) = 2 = 1+1
F(4) = 3 = 1+2
F(5) = 5 = 2+3
という感じで、1と2は例外で>2の時はF(n-1)-F(n-2)の値となる数列
上の式からそのまま導くと以下のような感じ。
function fib(n){
if(n <= 2){
return 1;
}else{
return fib(n-1) + fib(n-2);
}
}
for(var i=1;i<10;i++){
console.log(fib(i));
}
fibを再帰させてる*2なので数字が大きくなるとやばそう。F(n-1)とF(n-2)は途中で同じ計算をやってるので、毎回やるのはもったいないからキャッシュしてみる。
メモ化というらしい
var fibs = {};
function fib(n){
if(fibs[n]) return fibs[n];
if(n <= 2) return 1;
return fibs[n] = fib(n-1) + fib(n-2);
}
for(var i=1;i<10;i++){
console.log(fib(i));
}
- 404 Blog Not Found:アルゴリズム百選 - フィボナッチ数列にO()を学ぶ
- http://blog.livedoor.jp/dankogai/archives/50958771.html
コメント(0件)
- TB-URL http://efcl.info/adiary/031/tb/
-
Chapter 6. Building Reusability with JavaScript Functions
prog*sig ■6.0 Introduction関数を使う方法には function(){}のようなfunctionキーワードを使った関数宣言 匿名関数(function(){)()} or new Functionを使った関数コンストラクター 関数リテラル or f...