Sunday, January 12, 2014

factorial ,fibonacci, isPrime, Greatest Common Divisor (Using Dijkstra's Algorithm), exponentiation, recursion


For this lab, write a C program that will implement the following recursive algorithms:
factorial
fibonacci
isPrime
Greatest Common Divisor (Using Dijkstra's Algorithm)
exponentiation

/*plaimanus Lueondee
*652654620
*Prof Pat Troy
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
typedef int bool;
int debug = FALSE;
/////////////////////////////////////////////////////
int factorial(int n)
{
static int depth = -1;
if( n ==0 || n==1) {
return 1;
} else {
int retVal = n * factorial(n-1);
return retVal;
}
}
////////////////////////////////////////////
int fibonacci(int n) {
static int depth = -1;
if( n == 0 || n == 1) {
return n;
} else {
int retVal = fibonacci(n-1) + fibonacci(n-2);
return retVal;
}
}
/////////////////////////////////////////////////////
bool factorInRange(int m, int n) {
static int depth = 0;
if( m >= n ) {
return FALSE;
} else if(n % m == 0) {
return TRUE;
} else {
int retVal = factorInRange(m+1, n);
return retVal;
}
}
///////////////////////////////////////////////////////
bool isPrime(int n) {
bool retVal = (n < 2) ? FALSE : !factorInRange(2, n);
return retVal;
}
///////////////////////////////////////////////////
int gcd(int m, int n) {
static int depth = -1;
if(m == n) {
return m;
} else {
int retVal = (m > n) ? gcd(m-n, n) : gcd(m, n - m);
return retVal;
}
}
///////////////////////////////////////////////////////////////
int exponential(int m, int n) {
static int depth = -1;
if(n==0) {
return 1;
} else if( n == 1) {
return m;
} else if(n%2 == 0) {
int temp = exponential(m, n/2);
int retVal = temp * temp;
return retVal;
} else {
int retVal = m * exponential(m, n - 1);
return retVal;
}
}
/////////////////////////////////////////////////////////////////////////
int main (int argc, char **argv) {
debug = FALSE;
if( argc > 2 ) {
printf("Usage: %s [-d]\n", argv[0]);
exit(0);
}
if( argc == 2 && argv[1][0] == '-' && argv[1][1] == 'd' ) {
debug = TRUE;
}
bool quit = FALSE;
while( !quit ) {
int input = 0;
printf("0. to quit the program\n");
printf("1. factorial(positiveInteger)\n");
printf("2. Fibonacci(positiveInteger)\n");
printf("3. isPrime(positiveInteger)\n");
printf("4. gcd(firstNumber, secondNumber)\n");
printf("5. exponential(Base,Exponent)\n");
printf("\nPlease enter option that you would like to pursue =>");
scanf("%d", &input);
int number1 = 0;
int number2 = 0;
if (input == 0){
quit = TRUE;
}
else if( input == 1){
printf("Enter your number to be factorial=> ");
scanf("%d", &number1);
if( number1 < 0 ) {
printf("Please Enter possitive number\n\n");
} else {
printf("\n%d! is %d\n\n", number1, factorial( number1 ) );
}
}
else if (input == 2){
printf("Enter your fibonacci number: ");
scanf("%d", &number1);
if( number1 < 0 ) {
printf("Please Enter possitive number\n\n");
} else {
printf("\nfibonacci(%d) is %d\n\n", number1, fibonacci( number1 ) );
}
}
else if(input == 3){
printf("Enter your number to check if it is a prime number or not: ");
scanf("%d", &number1);
bool flag = isPrime( number1 );
char *fmt = flag ? "%d is a prime number\n\n" : "%d is NOT a prime number\n\n";
printf(fmt, number1);
}
else if(input == 4){
printf("Enter your first and second numbers: ");
scanf("%d %d", &number1, &number2);
if( number1 < 0 || number2 < 0 ) {
printf("Please enter positive numbers\n\n");
} else {
printf("The GCD of %d and %d is %d\n\n", number1, number2, gcd(number1, number2));
}
}
else if (input == 5){
printf("Enter your base and your exponent numbers: ");
scanf("%d %d", &number1, &number2);
if( number2 < 0 ) {
printf("Please enter positive number\n\n");
} else {
printf("%d^%d is %d\n\n", number1, number2, exponential(number1, number2));
}
}
}
return 0;
}

No comments:

Post a Comment