#include <stdio.h>


/*int func(int i)
{
int j = i;
 if (j==0)
	 return 0;
 else
	return func(j-1)+j;
}*/

int main()
{
	int i;
	
	printf("%i \n", even(1));
	printf("%i \n", even(2));
	printf("%i \n\n", even(3));
	
	printf("%i \n", add(5, 21));
	printf("%i \n", add(-5, 5));
	printf("%i \n\n", add(256, 1024));
	
	printf("%i \n", add2(5, 21));
	printf("%i \n", add2(-5, 5));
	printf("%i \n\n", add2(256, 1024));
	
	printf("%i \n", slow_pow(2, 2));
	printf("%i \n", slow_pow(2, 4));
	printf("%i \n\n", slow_pow(2, 10));
	
	//calc fib series (uses array on stack)
	printf("%i ", fib(0));
	printf("%i ", fib(1));
	printf("%i ", fib(2));
	printf("%i ", fib(3));
	printf("%i ", fib(4));
	printf("%i ", fib(5));
	printf("%i ", fib(6));
	printf("%i ", fib(7));
	printf("%i ", fib(8));
	printf("%i \n", fib(9));
	
	//create integer array on heap
	long int* array = (long int*)malloc(45*4);
	
	fib2(array, 40); //pass array pointer to fib2
	
	for (i=0; i<15; i++)	
		printf("%d ", array[i]); 

	printf("... %i %i \n\n", array[39], array[40]);
	
	printf("%i \n", recurse(0));
	printf("%i \n", recurse(1));
	printf("%i \n", recurse(2));
	printf("%i \n", recurse(3));
	printf("%i \n", recurse(4));
	printf("%i \n\n", recurse(5));
	
	printf("%i \n", pow(2,2));
	printf("%i \n", pow(2,3));
	printf("%i \n", pow(2,4));
	printf("%i \n\n", pow(2,5));
	
	printf("%i \n", pow(3,2));
	printf("%i \n", pow(3,3));
	printf("%i \n", pow(3,4));
	printf("%i \n\n", pow(3,5));
	
	return 0;
}