2008年2月2日土曜日

まずフィボナッチ数ってなんだろな


このエントリーをはてなブックマークに追加


今話題になってるのはこれ!
Y コンビネータって何?

まずフィボナッチがわからない。

wikiフィボナッチ数

あー!この式知ってる!高校のときに習ったやつだ!

ふむふむ、数列ってことはわかったんだけど、具体的なイメージはどんなんやろ。
引用練習、



フィボナッチは次の問題を考案した。

1つがいの兎は、産まれて2ヶ月後から毎月1つがいずつの兎を産む。
1つがいの兎は1年の間に何つがいの兎になるか?

この条件のもとで、つがいの数は次の表のようになる。どの月のつがいの合計も、その前の2つの月での合計の和となり、フィボナッチ数が現れていることがわかる。



む、引用がカッコよくない(>_<)枠の中の色を変えたいなぁ…。

あと「つがい」って何?
あった。
オスとメス1匹ずつってことらしい。
ふむふむ、これで、まぁわかった。


フィボナッチ以外にも数列がたくさんあって、とても覚えきれないし、理解するのも面倒くさい。
でもフィボナッチやその多の数列を知らずにプログラミングする場面を想像するとゾッとするなぁ…。

JS勉強して、ちょっとamachangのコードをおっかけてみよう。



var fib = function(n){
return (n <= 2) ? 1 : (arguments.callee(n-1) + arguments.callee(n-2));
};
fib(10);




arguments.calleeは、現在実行中の関数自体を指す。
これを利用することで無名関数の再帰が可能になる。




うん、簡単だw
んで、最後のはなんだろ、考えてみる。



var fib = (function() {
var fib = function(n){
return (n <= 2) ? 1 : (fib(n-1) + fib(n-2));
};
return fib;
})();
fib(10)



あー、つまり中で宣言したfibを使いまわしているから、



var _fib = fib; // _fib という名前に fib 関数を代入
fib = null; // 元の fib を消す

_fib(10); // 失敗する


これが失敗しないってことなのか。
なるほど。
ついでにvar は perl でいうところの my にあたる局所変数として宣言するためのものらしい。

Y コンビネータとλ計算についてはまたおいおいということで…、今日は解散。
本の続き読も。





0 件のコメント:

コメントを投稿