[C] - Visualizza Vettore Ricorsivamente

di il
4 risposte

[C] - Visualizza Vettore Ricorsivamente

Salve a tutti, vorrei un parere sul seguente esercizio

ES: (Visualizzare un vettore) Scrivete una funzione ricorsiva stampa_vettore che riceva come argomenti un vettore e la sua dimensione e non restituisca alcun dato. La funzione dovrà terminare la propria elaborazione e restituire il controllo a quella chiamante, quando avrà ricevuto un vettore di dimensione 0.

io l'ho svolto così:
#include <stdio.h>
#define DIM 10

void stampa_vettore(const int vett[], int size);

int main()
{
    int vettore[DIM] = {1,2,3,4,5,6,7,8,9,10};
    
    printf("\n");
    stampa_vettore(vettore, DIM);
    printf("\n\n");
    return 0;
}

void stampa_vettore(const int vett[], int size)
{
	if(size == 0)
	    return;
	else 
	{
	    printf("%d ", vett[--size]);
	    return stampa_vettore(vett, size);
        }
}
Il codice funziona ma il vettore viene visualizzato al contrario visto che parto da size 9 fino ad arrivare a size 0 (come chiede la traccia). Come posso visualizzarlo correttamente? o va bene svolto così?

L'unico modo che ho trovato per visualizzarlo correttamente è stato quello di dichiarare una variabile inizializzata a 0 nel main e di passarla alla funzione stampa_vettore al posto di size e incrementando tale variabile nei passi ricorsivi, ma non rispetterei la traccia che chiede di passare la dimensione del vettore.

Grazie.

4 Risposte

  • Re: [C] - Visualizza Vettore Ricorsivamente

    Devi invertire l'ordine di stampa e chiamata ricorsiva
    
    #include <stdio.h>
    
    void stampa_vettore(const int vett[], int size);
    
    int main()
    {
        int vettore[] = {1,2,3,4,5,6,7,8,9,10};
        
        printf("\n");
        stampa_vettore(vettore, sizeof(vettore)/sizeof(int));
        printf("\n\n");
        return 0;
    }
    
    void stampa_vettore(const int vett[], int size)
    {
    	if(size <= 0)
    	    return;
        	stampa_vettore(vett, size - 1);
    	printf("%d ", vett[size - 1]);
    }
    
  • Re: [C] - Visualizza Vettore Ricorsivamente

    Grazie mille non ci avevo pensato, se ho capito bene non hai usato l'else poichè se non entra nell'if vengono eseguite comunque tante chiamate di stampa_vettore fino a raggiungere la condizione dell'if (caso base) e poi a ritroso vengono eseguite le printf. Giusto?
  • Re: [C] - Visualizza Vettore Ricorsivamente

    L'else l'ho tolto per semplificare il codice, comunque sì le printf vengono eseguite a ritroso

    Un consiglio: il tuo codice originale era corretto, ma io eviterei di usare ++ e -- nelle funzioni ricorsive, che i bug sono sempre in agguato
  • Re: [C] - Visualizza Vettore Ricorsivamente

    Ok, grazie ancora
Devi accedere o registrarti per scrivere nel forum
4 risposte