Dato il vettore
int V[10]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
e le seguenti funzioni:
void stampa1(int V[], int k) { for(k=0; k < 10; k++) printf("%d ", V[k]); }void stampa2(int V[], int k) { if(k == 10) return; printf("%d ", V[0]); stampa2(&V[1], ++k); }void stampa3(int V[], int k) { if(k == 10) return; stampa3(&V[1], ++k); printf("%d ", V[0]); }si supponga che le funzioni siano attivate come stampa1(V, 0), stampa2(V, 0) e stampa3(V, 0) rispettivamente.
Quale o quali delle seguenti affermazioni sono corrette:
- tutti e tre le funzioni danno la stessa uscita
- stampa1 e stampa2 danno la stessa uscita mentre stampa3 dà una uscita diversa
- stampa1 e stampa3 danno la stessa uscita mentre stampa2 dà una uscita diversa
- stampa2 e stampa3 danno la stessa uscita mentre stampa1 dà una uscita diversa
- la funzione stampa2 e stampa3 sono sbagliate
Soluzione: b (stampa1 e stampa2 danno la stessa uscita mentre stampa3 dà una uscita diversa)
Osserva
- stampa1(V, 0): scorre e visualizza gli elementi dal primo all'ultimo.
- stampa2(V, 0): k<>10, visualizza il primo elemento (10) e chiama stampa2(&V[1], 1)
stampa2(&V[1], 1): k<>10, visualizza il primo elemento (20) e chiama stampa2(&V[1], 2)
...
visualizza gli elementi dal primo all'ultimo. - stampa3(V, 0): k<>10, chiama stampa3(&V[1], 1) e poi stampa 10
stampa3(&V[1], 1): k<>10, chiama stampa3(&V[1],2) e poi stampa 20
...
visualizza gli elementi dall'ultimo al primo.