/* File: fib2.c A recursive function for Fibonacci numbers using a memoization table. */ #include #include int rec_fib(int n, int *T) { if (T[n] > 0) return T[n] ; return T[n] = rec_fib(n-1,T) + rec_fib(n-2,T) ; } int fib(int n) { int *T, i ; if (n <= 1) return 1; T = (int *) malloc(sizeof(int)*(n+1)) ; if (T == NULL) abort() ; for (i = 0 ; i <= n ; i++) { T[i] = -1 ; } T[0] = T[1] = 1 ; return rec_fib(n, T) ; } main(int argc, char *argv[]) { int n, r ; if (argc !=2) { printf("Wrong number of arguments!\n") ; exit() ; } r = sscanf(argv[1],"%d", &n) ; if (r != 1) { printf("Need an integer argument!\n") ; exit() ; } printf("Fib(%d) = %d\n", n, fib(n)) ; }