Ultima modifica:
Io personalmente costruirei una funzione ricorsiva per ogni livello di cornice, ma che all'interno abbia dei for per disegnare il livello attuale (per non complicare troppo le cose che eccessive ricorsioni).
In pseudo codice:
Non e' il codice migliore del mondo, ma secondo me e' adeguato per svolgere questo esercizio e mettere un minimo di ricorsione per stimolare di piu' questo tipo di programmazione.
Questo esercizio puo' essere svolto in modi diversi: completamente iterativo o completamente ricorsivo o ibrido come ho scritto io. Scegli tu! Se qualcosa non e' chiaro dimmi pure
(Ho usato uno pseudo codice, ma in realta'la sintassi del corpo della funzione e' identica a Java.)
Ps. ovviamente fai qualche prova perche' non vorrei mi fosse sfuggito qualcosa, concettualmente pero' funziona
In pseudo codice:
Codice:
disegnaCornice(livello_di_partenza, m, n, matrix[][]){
if(livello_di_partenza>m/2){ //se il livello_di_partenza supera il valore della meta' della lunghezza
//di un lato della matrice, allora vuol dire che l'ho disegnata tutta
return;
}
int i=livello_di_partenza-1; //indica la riga cornice da cui partire
int j=livello_di_partenza-1; //indica la colonna cornice da cui partire
for(; i<m; i++){
matrix[i][j]=livello_di_partenza; //disegno il lato sinistro della cornice
}
for(i=0; i<m; i++){
matrix[i][n-livello_di_partenza]=livello_di_partenza; //disegno il lato destro della cornice
}
for(; j<n; j++){
matrix[livello_di_partenza-1][j]= livello_di_partenza; //disegno cornice superiore
}
for(j=0; j<n; j++){
matrix[n-livello_di_partenza][j]= livello_di_partenza; //disegno cornice inferiore
}
disegnaCornice(livello_di_partenza++, m, n, matrix);
}
Non e' il codice migliore del mondo, ma secondo me e' adeguato per svolgere questo esercizio e mettere un minimo di ricorsione per stimolare di piu' questo tipo di programmazione.
Questo esercizio puo' essere svolto in modi diversi: completamente iterativo o completamente ricorsivo o ibrido come ho scritto io. Scegli tu! Se qualcosa non e' chiaro dimmi pure
(Ho usato uno pseudo codice, ma in realta'la sintassi del corpo della funzione e' identica a Java.)
Ps. ovviamente fai qualche prova perche' non vorrei mi fosse sfuggito qualcosa, concettualmente pero' funziona