Esercizi vari con ricorsione

Qualche esercizio per comprendere al meglio la ricorsione.

Condividi l'articolo

Ecco elencato qualche algoritmo ricorsivo scritto da me e postato visto che non si trovano soluzioni molto simili sulla rete.

Problema: sommare i primi n numeri naturali con ricorsione

 long somma(long n) {

    return (n > 0) ? n + somma (n - 1) : 0;

}

 

Problema: stampare una stringa al contrario

void reverse(char *str) {

    if (*str != '\0') { 

        reverse(++str);
        cout << *(str-1);

    }
}

 

Problema: trovare l’elemento più grande di un vettore

int max(int n, int v[]) {

    return (n == 0) ? -1 : (v[n - 1] > max(n - 1, v)) ? v[n - 1] : max(n - 1, v);
}

 

Problema: verificare che una stringa sia palindroma

bool pal(char *str) {

    static int n = strlen(str);

    if (n < 1) return true;
    if (*str == *(str+n-1)) {

        n -= 2;
        return pal(str+1);
    }

    return false;

}

 

Problema: trovare il numero di occorrenze in un vettore

int occorrenze(int n, int *v, int val) {

    if (n == 0) return 0;

    int occ = occorrenze(n - 1, v, val);
    return (*(v+n-1) == val) ? occ + 1 : occ;

}

 

Problema: ordinare un vettore con l’algoritmo “select sort”

void select_sort(int n, int *v) {

    int indice_max = 0, app = 0;

    for (int i = indice_max; i < n; i++)          if (v[i] > v [indice_max]) 
            indice_max = i;

    app = v[n-1];
    v[n-1] = v[indice_max];
    v[indice_max] = app;

    if (n > 1) select_sort(n - 1, v);

}