練習問題

long longの上限値を考慮して第90項まで対応。

#include <stdio.h>
#include <stdlib.h>
#define LIMIT 90
typedef long long i64;

i64 fib(int n);
i64 dp[LIMIT];

int main(int argc, char *argv[]) {
    int n;
    if(argc < 2) { return 1; }
    n = atoi(argv[1]);
    if(n < 1) { return 1; }
    if(LIMIT < n) { return 1; }
    printf("%3d: %lld\n", n, fib(n));
    return 0;
}

i64 fib(int n) {
    int i;
    dp[1] = dp[2] = 1LL;
    for(i=2; i<=n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}