Cosa stampa il seguente programma?
#includeint mistero(int m, int n) { if(m == 0) return n; else if(n == 0) return mistero(m-1, 1); else return mistero(n-1, mistero(m-1, n-1)); } int main() { printf("%d %d %d %d\n", mistero(0,3), mistero(1,3), mistero(2,3), mistero(3,3)); return 0; } Risposte:
- 3 1 2 0
- 3 1 1 0
- 3 1 0 1
- nessuna delle precedenti
Soluzione: c (3 1 0 1)
Compila la tabella (con molta attenzione…)
m/n |
0 | 1 | 2 | 3 |
0 | m(0,0) 0 |
m(0,1) 1 |
m(0,2) 2 |
m(0,3) 3 |
1 | m(1,0) m(0,1) 1 |
m(1,1) m(0,m(0,0)) m(0,0) 0 |
m(1,2) m(1,m(0,1)) m(1,1) 0 |
m(1,3) m(2,m(0,2)) m(2,2) 1 |
2 | m(2,0) m(1,1) 0 |
m(2,1) m(0,m(1,0)) m(0,1) 1 |
m(2,2) m(1,m(1,1)) m(1,0) 1 |
m(2,3) m(2,m(1,2)) m(2,0) 0 |
3 | m(3,0) m(2,1) 1 |
m(3,1) m(0,m(2,0)) m(0,0) 0 |
m(3,2) m(1,m(2,1)) m(1,1) 0 |
m(3,3) m(2,m(2,2)) m(2,1) 1 |
Osserva l’alternativa
m(3,3) = m(2, m(2,2)) = m(2,m(1,m(1,1))) = m(2,m(1,m(0,m(0,0))) = m(2,m(1,m(0,0)) = m(2,m(1,0)) = m(2,m(0,1)) = m(2,1) = m(0,m(1,0)) = m(0,1) = 1