Esercizio Mistero ricorsione

Cesaropa12
Nelle olimpadi di informatica(selezione scolastica anno 2006) hanno messo questo quesito:
sia data la seguente funzione ricorsiva:

int mistero(int m,int n)
{

if (m==0)
return n;
else if( n==0)
return mistero(m-1,1);
else
return mistero( mistero(m-1,n-1),n-1);

}

calcolare i valori con mistero(0,3), mistero(1,3), mistero(2,3), mistero(3,3). Secondo voi come si fa a risolverlo?
[/code][code]
[code][/code]

Risposte
codino75
non ho mai avuto una "mente ricorsiva"... i'm sorry :cry: :cry: :cry:

anonymous_be1147
Abbreviando "mistero" con "m":

m(0, 3) => 3 # ritorna con il primo if


m(1, 3) => m( m(0, 2), 2) => m(2, 2) => m( m(1, 1), 1) =>
=> m( m( m(0, 0), 0), 1) => m( m(0, 0), 1) => m(0, 1) => 1


m(2, 3) => m( m(1, 2), 2) => m( m( m(0, 1), 1), 2) =>
=> m( m(1, 1), 2) => m( m( m(0, 0), 0), 2) => m( m(0, 0), 2) => 
=> m(0, 2) => 2


m(3, 3) => m( m(2, 2), 2) => m(1, 2) => m( m(0, 1), 1) => m(1, 1) =>
=> m( m(0, 0), 0) => m(0, 0) => 0


Legenda: => uguale "restituisce il valore di"

Cesaropa12
Ok..ho capito...Semplicemente si sviluppa come hai fatto tu. Io pensavo che ci fosse un sistema per capire cosa restituisce dati due valori...Cmq credo che la procedura non esegua qualcosa in particolare, l'hanno messa solo per vedere se si era in grado di calcolare alcuni valori. cmq grazie.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.