Originariamente inviato da ramy89
Partiamo da questa:
codice:
#include <iostream>
using namespace std;
int f(int x, int y)
{
if(y <= 0) return x;
return f(x+1, y-1);
}
Restituisce la somma tra x e y, ma solo se y>0.
Altrimenti restituisce x.
Il perchè sta nel codice, tradotto significa:
"Se y non è positivo ritorna x, altrimenti incrementa x y volte e ritorna x"
Questa:
codice:
int g(int x, int y)
{
if(y <= 1) return x;
return f(x, g(x, y-1));
}
Questa è la funzione moltiplicazione, ma funziona solo se y>1.
Se y>1 ritorna la somma di x più la moltiplicazione di x per y-1.
Il che equivale a dire che ritorna la moltiplicazione tra x e y, perchè quando y sarà 1, a x gli avrai sommato x y-1 volte.
Ti faccio un esempio:
Ho g(4,3) -> f(4, f(4,g(4,2)) -> f(4, f(4,f(4,g(4,1))))
g(4,1) = 4, allora g(4,3) = f(4, f(4,4)) = f(4,8) = 12.
codice:
int main ()
{
cout << g(6, 3) << endl;
return 0;
}
Nel main stampa la moltiplicazione tra 6 e 3, se non erro dovrebbe stampare 18, prova a compilarlo e fammi sapere il risultato.