Newer
Older
extern int fib_main();
extern int fib2();
extern int fib2p(int n, int (*)(int,int));
int add2(int n1, int n2)
{
if (n1 == 0)
return n2;
else if (n2 == 0)
return n1;
else if (n2 == 2)
return add2(add2(n1, 1),1);
else
return add2(0, n2) + add2(n1, 0);
}
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib_main(n-1) + fib2(n-2);
}
int fibp(int n, int (*addp)(int,int))
{
if (n <= 2)
return 1;
else
return (*addp)(fib_main(n-1),fib2p(n-2,&add2));
}