2014年11月14日金曜日

プロジェクトオイラー問2 「偶数のフィボナッチ数」 †

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202
フィボナッチ数列で偶数かつ400万以下のものの総和を答えよという問題。



カウボーイビバップパロディ。

永遠に続く計算はない。
それは自然の摂理というものだ。
そこで今回はここに書いた計算というものをいろいろ考えてみたいと思う。

終了条件はとても大切だ。
何しろ関数の本質は自身のパーツでできているわけだ。

もし今回の類似コードの終了条件が違ったとして
構造的には同じでも全く違った結末になるはずだ
類似コードは俺のよりも速いかもしれないし
メモリの場所取りに行くようなコードかもしれない。
凶暴な無限ループかもしれないし
再帰にはカットあててから進むような奴かもしれない。
類似コードは私のとは別物だ。
ようするに終了条件を選ぶときはよくよく考えて選ばないといけないわけだ。




f(_,N2,Sum):-
4000000<N2,
!,
write(Sum).
f(N1,N2,Sum):-
Sum1 is Sum+N2,
N22 is N2*3+N1*2,
N11 is N2*2+N1,
f(N11,N22,Sum1).
main:-
f(1,2,0).





チューリングマシンは計算が終わらないことが判定できないのですがここはネタ優先で。

0 件のコメント:

コメントを投稿