Chiarimento sulla ricorsione

di il
5 risposte

Chiarimento sulla ricorsione

Salve a tutti, vorrei un chiarimento in merito al seguente codice:

#include <stdio.h>
#define DIM 10

void invertiVettore(const int vett[], int start, int dim);

int main()
{
    int vettore[DIM] = {8,3,1,2,6,0,9,7,4,5};

    printf("\nil vettore invertito e' : \n");
    invertiVettore(vettore, 0, DIM);
    printf("\n\n");

    return 0;
}

void invertiVettore(const int vett[], int start, int dim)
{
    if(start < dim)
    {
        invertiVettore(vett, start+1, dim);
        printf("%d ", vett[start]);
    }
    return;
}
questo algoritmo stampa a video il vettore al contrario (per intenderci da 5a8) ma non sono sicuro di aver capito come funziona la chiamata ricorsiva, perciò provo a scrivere cosa ho capito: finchè è verificata la condizione dell'if (start < dim) viene chiamata la funzione invertiVettore su start+1 fino a raggiungere il valore di DIM, a quel punto la condizione dell'if non è più "vera" e quindi la printf inizia a stampare a video il valore di vett[start] a ritroso fino a raggiungere vett[0]. E' corretto? Grazie in anticipo

5 Risposte

  • Re: Chiarimento sulla ricorsione

    E uguale al caso delle delle chiamate a funzione ordinarie. Immagina che vengano chiamate invertiVettore_1, invertiVettore_2, etc.
  • Re: Chiarimento sulla ricorsione

    Ok grazie, quindi se ho ben capito vengono chiamate tante funzioni quanti sono i passaggi fino a raggiungere il valore di DIM (in questo caso 10) giusto?
  • Re: Chiarimento sulla ricorsione

    Considerata la chiamata dal main sono 11. L'undicesima è la prima che arriva al return, quindi riprende l'esecuzione la decima dalla riga dopo la chiamata all'undicesima, la decima arriva al return e riprende l'esecuzione la nona... e così via
  • Re: Chiarimento sulla ricorsione

    Semplicemente una funzione che chiama se stessa più volte. Prova ad analizzare con un debugger e capirai meglio!
  • Re: Chiarimento sulla ricorsione

    Grazie a tutti per le risposte e scusate il ritardo ma sono stato assente per un pò, comunque mi è tutto chiaro, grazie ancora.
Devi accedere o registrarti per scrivere nel forum
5 risposte