#include <stdio.h>
// 方法1
int fib1(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int a = 0, b = 1, c, i;
for (i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
// 方法2
int fib2(int n) {
if (n == 0) return 0;
int fib[n+1];
fib[0] = 0;
fib[1] = 1;
int i;
for (i = 2; i <= n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}
return fib[n];
}
// 方法3
int fib3(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib3(n-1) + fib3(n-2);
}
int main(void) {
int n;
printf("非負の整数 n を入力してください: ");
printf("fib1(%d) = %d(変数のみ)\n", n
, fib1
(n
)); printf("fib2(%d) = %d(配列使用)\n", n
, fib2
(n
)); printf("fib3(%d) = %d(再帰関数)\n", n
, fib3
(n
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDmlrnms5XvvJEKaW50IGZpYjEoaW50IG4pIHsKICAgIGlmIChuID09IDApIHJldHVybiAwOwogICAgaWYgKG4gPT0gMSkgcmV0dXJuIDE7CgogICAgaW50IGEgPSAwLCBiID0gMSwgYywgaTsKICAgIGZvciAoaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgYyA9IGEgKyBiOwogICAgICAgIGEgPSBiOwogICAgICAgIGIgPSBjOwogICAgfQogICAgcmV0dXJuIGI7Cn0KCi8vIOaWueazle+8kgppbnQgZmliMihpbnQgbikgewogICAgaWYgKG4gPT0gMCkgcmV0dXJuIDA7CgogICAgaW50IGZpYltuKzFdOwogICAgZmliWzBdID0gMDsKICAgIGZpYlsxXSA9IDE7CgogICAgaW50IGk7CiAgICBmb3IgKGkgPSAyOyBpIDw9IG47IGkrKykgewogICAgICAgIGZpYltpXSA9IGZpYltpLTFdICsgZmliW2ktMl07CiAgICB9CiAgICByZXR1cm4gZmliW25dOwp9CgovLyDmlrnms5XvvJMKaW50IGZpYjMoaW50IG4pIHsKICAgIGlmIChuID09IDApIHJldHVybiAwOwogICAgaWYgKG4gPT0gMSkgcmV0dXJuIDE7CiAgICByZXR1cm4gZmliMyhuLTEpICsgZmliMyhuLTIpOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQgbjsKCiAgICBwcmludGYoIumdnuiyoOOBruaVtOaVsCBuIOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhDogIik7CiAgICBzY2FuZigiJWQiLCAmbik7CgogICAgcHJpbnRmKCJmaWIxKCVkKSA9ICVk77yI5aSJ5pWw44Gu44G/77yJXG4iLCBuLCBmaWIxKG4pKTsKICAgIHByaW50ZigiZmliMiglZCkgPSAlZO+8iOmFjeWIl+S9v+eUqO+8iVxuIiwgbiwgZmliMihuKSk7CiAgICBwcmludGYoImZpYjMoJWQpID0gJWTvvIjlho3luLDplqLmlbDvvIlcbiIsIG4sIGZpYjMobikpOwoKICAgIHJldHVybiAwOwp9