2005 – 7

Cosa stampa il seguente programma?

#include 

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);
}

int main()
{
    printf("%d %d %d %dn", mistero(0,3), mistero(1,3), mistero(2,3), mistero(3,3));
    return 0;
}

Risposte:

  1. 3 1 2 0
  2. 3 2 1 0
  3. 0 1 2 3
  4. Nessuna delle precedenti

Soluzione: a (3 1 2 0)


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(m(0,0),0)
m(0,0)
0
m(1,2)
m(m(0,1),1)
m(1,1)
0
m(1,3)
m(m(0,2),2)
m(2,2)
1
2 m(2,0)
m(1,1)
0
m(2,1)
m(m(1,0),0)
m(1,0)
1
m(2,2)
m(m(1,1),1)
m(0,1)
1
m(2,3)
m(m(1,2),2)
m(0,2)
2
3 m(3,0)
m(2,1)
1
m(3,1)
m(m(2,0),0)
m(0,0)
0
m(3,2)
m(m(2,1),1)
m(1,1)
0
m(3,3)
m(m(2,2),2)
m(1,2)
0