Esercizio Mistero ricorsione
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?
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
non ho mai avuto una "mente ricorsiva"... i'm sorry



Abbreviando "mistero" con "m":
Legenda: => uguale "restituisce il valore di"
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"
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.