#include <stdio.h> #include <stdlib.h> #define CONTABILIZA unsigned long fibonacciRec(int n) { #ifdef CONTABILIZA static unsigned long chamadas = 0; if(n == -1) return chamadas = 0; if(n == -2) return chamadas; chamadas++; #endif if(n < 2) return 1UL; return fibonacciRec(n-1) + fibonacciRec(n-2); } unsigned long fibonacci(int n) { int i; unsigned long fn1, fn2, fn; fn = fn1 = fn2 = 1UL; for(i = 2; i <= n; i++) { fn = fn1 + fn2; fn2 = fn1; fn1 = fn; } return fn; } int main(int argc, char *argv[]) { int n, res; #ifdef CONTABILIZA printf("Numero de chamadas da funcao Fibonacci recursiva.\n"); #endif printf("Qual o valor n? "); while((res = scanf("%d", &n)) != 1 && res != EOF) /* Nada */; if(res == EOF) return EXIT_FAILURE; #ifdef CONTABILIZA /* Anula contador: */ fibonacciRec(-1); #endif /* Calcula Fibonacci: */ printf("F(%d) = %lu\n", n, fibonacciRec(n)); #ifdef CONTABILIZA /* Imprime numero de chamadas: */ printf("chamadas = %lu\n", fibonacciRec(-2)); #endif return EXIT_SUCCESS; }