#include <stdio.h>
#define MinIndex 0
#define MaxIndex 15
int CountFib1(int n,int *c1);
int CountFib2(int n,int *c2);
main()
{
int i,x,y,r1,r2;
clrscr();
printf("This program compares the performance of two/n");
printf("algorithms to compute the Fibonacci sequence./n");
printf("Number of calls:/n");
printf(" N Fib1 Fib2/n");
printf(" -- ---- ----/n");
for(i=MinIndex;i<=MaxIndex;i++)
{
x=y=0;
r1=CountFib1(i,&x);
r2=CountFib2(i,&y);
printf(" %2d %4d %4d/n",i,x,y);
}
getch();
}
int CountFib1(int n,int *c1)
{
(*c1)++;
if(n<2)
return (n);
else
return(CountFib1(n-1,c1)+CountFib1(n-2,c1));
}
int CountFib2(int n,int *c2)
{
(*c2)++;
return(AdditiveSequence(n,0,1,c2));
}
int AdditiveSequence(int n,int t0,int t1,int *c2)
{
(*c2)++;
if(n==0) return (t0);
if(n==1) return (t1);
return(AdditiveSequence(n-1,t1,t0+t1,c2));
}