edutecnica

Esercizio 5        

Scrivere una funzione che riceva in ingresso un double b (base) ed un intero e (esponente) che restituisca il valore della potenza be usando ricorsivamente l’operazione

senza usare la libreria math.h per le funzioni matematiche.

#include<iostream>
using namespace std;
double quad(double b){return b*b;}
double pot(double b, int e){
   return e==0 ? 1.0
          : e%2==0
          ? quad(pot(b,e/2))
          : b*pot(b,e-1);
}//pot
main(){
   cout<<pot(2.5,3);
}//main

La funzione

double pot(double b, int e);

restituisce sempre un numero a precisione doppia.
Se l’esponente (e) č uguale a zero, viene sempre resituito 1; se l’esponente (e) č un numero pari, viene usata la funzione quad() per calcolare;

se invece l’esponente č dispari viene eseguita ricorsivamente con la

Questo accorgimento rende l’algoritmo molto efficiente.
Se ad esempio e=20 vengono eseguiti 6 prodotti invece dei 20 della soluzione iterativa; se e=1000 vengono eseguite solo 15 moltiplicazioni.