PDA

Visualizza la versione completa : [C] calcolare pow


devil89
31-07-2008, 23:06
Tramite ricorsione, senza utilizzare funzioni di libreria, possibile calcolare l'elevamento a potenza senza richiamare la stessa funzione esponente-volte?

XWolverineX
31-07-2008, 23:16
int pow(int x, int y)
{
for (int i = 0; i < y; i++)
i*= i;

return i;
}

devil89
31-07-2008, 23:22
a parte che non ricorsiva, ma come f a funzionare? :confused:

pallinopinco
01-08-2008, 00:10
Tramite ricorsione, senza utilizzare funzioni di libreria, possibile calcolare l'elevamento a potenza senza richiamare la stessa funzione esponente-volte?

E quale potrebbe essere la condizione di uscita dalla ricorsione per evitare che la funzione venga richiamata meno di "esponente" volte?

YuYevon
01-08-2008, 09:46
Non penso sia possibile una cosa del genere... io per il calcolo di una potenza conosco - oltre alla versione iterativa - quella ricorsiva lineare e ricorsiva binaria, ma entrambe non richiamano la funzione meno di esponente-volte.

Del resto non vedo proprio come possa essere realizzata una cosa del genere...

devil89 ma un'idea tua o hai letto questa cosa da qualche parte (testo di esercizio o altro) ?

XWolverineX
01-08-2008, 11:26
Ho scritto una gran cagata scusate.

Xant
01-08-2008, 12:10
#include <stdio.h>
#include <stdlib.h>
/* mypow */

int mypow(int, int);

int main()
{ int n = 3, a = 4;

printf("mypow(%d, %d) = %d\n", n, a, mypow(n, a));
system("pause");
return 0;
}

int mypow(int n, int a){
int c;
if(a==0)
return 0;
else if(a==1)
return n;
else
c=mypow(n, a-1);
return n*c;
}


Il risultato:

mypow(3, 4) = 81
Premere un tasto per continuare...


Questa una funzione ricorsiva per l'elevamento a potenza. Poi non so se quello che cercavi..

pallinopinco
01-08-2008, 12:56
#include <iostream>

using namespace std;

// Non funziona con esponenti negativi
int power(int b, int e) {
if (e < 1) return 1;
return b*power(b, e-1);
}

int main(void) {
int base, esponente;

cout << "Base: ";
cin >> base;
cout << "Esponente: ";
cin >> esponente;
cout << "Risultato: " << power(base, esponente) << endl;
}

XWolverineX
01-08-2008, 13:08
Avevo scritto pure io la vostra stessa soluzione, ma la funzione viene comunque chiamata esponente volte.

Xant
01-08-2008, 13:10
Si ma non ho capito per qual motivo ti serve una funzione che non venga chiamata esponente-volte... cos non va bene?

Loading