PROBLEMA funzione ricorsiva c++

fedi98

Nuovo Utente
121
8
codice in c++

ho trovato questo frammento di codice su internet per capire le funzioni ricorsive.... ma non riesco a capire perche quando si esce dalla funzione con return mi viene stamppato sullo schermo 1*ris (in questo caso 625) e non 1
cioe se dopo return metto 3, la funzione stampa 1875, ma perche??
ho sempre saputo che return riportava quello che c' era dopo, in questo caso 1

inoltre se dopo return scrvo ris, sullo tempo viene stampato un numero con esponente, probabilmente casuale

#include <iostream>
using namespace std;
double eleva(double base, int esp);
int main ()
{
cout << eleva(5,4);
}


double eleva(double base, int esp)
{
double ris;
if (esp==0)
{
return 1;
}
ris = base * eleva(base, esp-1);
}

grazie a chiunque mi risponda
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,923
11,563
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
ti manca il return finale
return (base * eleva(base, esp-1));
alposto dell'istruzione con ris, sempre dando per scontato che l'utente inserisca un esponente intero esp>0 altrimenti la ricorsione non termina.

Ma c'è qualche motivo per farla ricorsiva? ti bastava un for

PS
magari quando ritorni 1 mettici un 1.0 (non necessario ma la funzione dovrebbe ritornare un double)
per il test nel main (preferisco separare stampe dai calcoli)
double k = eleva(5,4);
cout << k;

mi stampa correttamente 625
 
Ultima modifica:

fedi98

Nuovo Utente
121
8
ti manca il return finale
return (base * eleva(base, esp-1));
alposto dell'istruzione con ris, sempre dando per scontato che l'utente inserisca un esponente intero esp>0 altrimenti la ricorsione non termina.

Ma c'è qualche motivo per farla ricorsiva? ti bastava un for

PS
magari quando ritorni 1 mettici un 1.0 (non necessario ma la funzione dovrebbe ritornare un double)
per il test nel main (preferisco separare stampe dai calcoli)
double k = eleva(5,4);
cout << k;

mi stampa correttamente 625


ho trovato questo esercizio sul mio libro ed è per questo che uso una funzione ricorsiva, se no ovviamente sarebbe più facile con il banale ciclo
comunque il mio problema è sul perchè e sul come il codice funziona... cioe ho notato pure io che mi stampa i risultati giust, ma non son sicuro sul suo funzionamento....
forse al momento del return finale si ha 1* base * eleva(base, esp-1)* base * eleva(base, esp-1)... ecc.... quindi si moltiplicherebbe 1 per il risultato delle funzioni, pero non ne son sicuro
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,923
11,563
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
funziona così:
eleva(5,4) ritorna
5*eleva(5,3) che a sua volta dopo l'invocazione ricorsiva da origine a
5*5*eleva(5,2) che ritorna
5*5*5*eleva(5,1) che ritorna
5*5*5*5*eleva(5,0) che ritorna
5*5*5*5*1
alla fine le moltiplicazioni verranno ritornate "all'indietro" ogni volta che si chiude una chiamata ricorsiva
 
  • Mi piace
Reazioni: fedi98

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili