C Program to find the result of a Number raised to another Number (Recursive Approach) (For Small Numbers)


 
// Program by Akash Tripathi (@proakash256) 
 
// If we do it normally by running a loop till that power,
// then its Time Complexity will be O(n).

// To find :- (a ^ b)
// Here a is a Real Number and b is an Integer
 
// if b is even , then we can write it as (a ^ 2) ^ (b / 2)

// if b is odd , then we can write it as (a * (a ^ (b - 1)))
// Now b is even , so we can
// proceed by the first (even) method.
// This method's Time Complexity will be O(log(b)).

#include <stdio.h>

double power(double clong long d)
{
    static double res = 1;
    if (d > 0)
    {
        if ((d & 1) != 0// (d % 2) != 0
                         // (Condition for Odd)
        {
            res = res * c;
        }
        power((c * c), (d >> 1));
    }
    return res;
}
// Another Recursive Method :
// double power(double c, long long d)
// {
//      if(d == 0)
//         return 1.0;
//     if(d == 1)
//         return c;
//     double res = power((c * c) , (d >> 1));
//     if ((d & 1) != 0) // (d % 2) != 0 (Condition for Odd)
//     {
//          res = res * c;
//     }
//     return res;
// }
int main()
{
    double a;
    long long b;
    printf("Enter the Number : ");
    scanf("%lf" , &a);
    printf("\nEnter the Power : ");
    scanf("%lli" , &b);
    double res;
    if(b < 0)
    {
        res = power((1 / a) , (-b));
    }
    else
    {
        res = power(a , b);           
    }
    printf("\n(%0.2lf ^ %lli) is : %lf\n\n" ,
             a , b , res);
    return 0;
}

Comments