next up previous contents
suivant: Pgcd monter: Corrigés des programmes précédent: Tours de Hanoï   Table des matières

Suite de Fibonacci

fibo.c


#include<stdio.h>

#define N 45

unsigned long fibo(unsigned long l)
{
  if (l == 0)
    return 0;
  if (l == 1)
    return 1;
  return fibo(l - 1) + fibo(l - 2);
}

void phi(unsigned long* l1, unsigned long* l2)
{
  unsigned long temp;
  temp = *l1;
  *l1 += *l2;
  *l2 = temp;
}

void applyF(void (*f)(unsigned long*, unsigned long*), 
	    int n, unsigned long* l1, unsigned long* l2)
{
  if (n > 0)
    {
      f(l1, l2);
      applyF(f, n-1, l1, l2);
    }
}

unsigned long fastFibo(unsigned long l)
{
  unsigned long l1 = 1, l2 = 0;
  applyF(phi, l, &l1, &l2);
  return l2;
}

int main()
{
  unsigned long l;
  for(l = 0 ; l <= N ; l++)
    printf("%lu = %lu\n", l, fibo(l));
  for(l = 0 ; l <= N ; l++)
    printf("%lu = %lu\n", l, fastFibo(l));
  return 0;
}



klaus 2010-08-05