Prev Up Next
Go backward to E também iterativo
Go up to Alguns exercícios a exemplos dados nas aulas teóricas
Go forward to Mais recursividade

Mais Fibonacci



 // -----------------------------------------------------------------------------
 // Recursividade III
 // Fibonacci: marcação das entradas nas funções
 /* Objectivo: escrever uma versão da função recursiva

 main(){
   int n;
   int fib(int);
   do{
     printf("Numero (negativo para acabar? ");
     scanf("%d",&n);
     if(n<0)
       break;
     printf("fib(%-d) = %-d\n",n,fib(n));
   }
   while(1);
 }

 #define SM  2

 int fib(int n){
   int t1,t2;
   static int sp=0;
   void space(int);
   space(sp);
   printf("fib(%-d)\n",n);
   sp+=SM;
   if(n==0){
     sp-=SM;
     return(0);
   }
   if(n==1){
     sp-=SM;
     return(1);
   }
   t1=fib(n-1);
   t2=fib(n-2);
   sp-=SM;
   return(t1+t2);
 }

 void space(int n){
   int i;
   for(i=0;i<n;i++)
     printf(" ");
 }

 /* Resultados:
 Numero (negativo para acabar? 5
 fib(5)
   fib(4)
     fib(3)
       fib(2)
         fib(1)
         fib(0)
       fib(1)
     fib(2)
       fib(1)
       fib(0)
   fib(3)
     fib(2)
       fib(1)
       fib(0)
     fib(1)

 fib(5) = 5



Prev Up Next