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.