Problem 2
フィボナッチ数列の項は前の2つの項の和である。 最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。
Problem 2 - PukiWiki
最初、「項(の値)が400万」であるところを「項数400万」と誤読したせいで大変なことになりました。
再帰を使ってフィボナッチ数列の項を求めようとしたら、スタックオーバーフローの嵐。
無駄なことはやめて1から順番に見ていきました。
#include <stdio.h> #define TERM_MAX 4000000 void problem002() { int ans, val, a, b; /* solve this problem here */ ans = 0; val = 0; a = 1; b = 2; ans += b; while (val <= TERM_MAX) { if ((val % 2) == 0) { ans += val; } val = a + b; a = b; b = val; } printf("%s: answer = %d\n", __FUNCTION__, ans); } int main(int argc, char* argv[]) { problem002(); return 0; }
実行結果
$ ./problem002 problem002: answer = 4613732