   /* potega liczona rekurencyjnie */
   
   #include<stdio.h>

   double potega(double, int);
   
   main()
   { 
     double x;

     int n;

     printf("Prosze podac liczbe rzeczywista =");

     scanf("%le", &x);

     printf("Prosze podac liczbe naturalna =");

     scanf("%d", &n);

     printf("%le do potegi %d = %le", x, n, potega(x, n));
     
	}

   double potega(double x, int n)
   {
      double z;

      if(n < 0) return(potega(1.0/x, -n));

      else if(n == 0)      return(1);
      
           else if(n == 1) return(x);

                else if(n % 2 == 0)
                 { 
                   z = potega(x, n / 2);

                           return(z * z);
                }
                else
                           return(x*potega(z, n - 1));
      }                  
                      