[C] Esercizio funzione ricorsiva

Messaggioda nick_10 » 21/11/2018, 23:16

Ciao! Sono sempre alle prese con esercizi sulle funzioni ricorsive...questa volta il testo mi chiede:
"Scrivere in C una funzione RICORSIVA che
• legga da linea di comando (senza memorizzarla) una sequenza di interi positivi che termina appena entra 0 e che
• restituisca il numero di interi che sono preceduti da un elemento di valore triplo.
Ad esempio, se la sequenza fosse 3 7 2 6 2 9 2 8 7 36 12 4 0, la funzione dovrebbe restituire 3."

Io sono riuscito a farlo nel modo che riporto qui sotto. Volevo sapere se secondo voi può andar bene.
In esercizi di questo genere sulla ricorsione, il mio problema è capire come inserire un "passo base" e poi il richiamo della funzione stessa.
In questo esercizio ci son riuscito solo leggendo il primo numero della sequenza dal main e passarlo poi alla funzione...magari c'è un modo per scrivere il programma con una funzione dal prototipo "int funzione()" e leggere tutti i numeri della sequenza nella funzione stessa. Non so se mi son spiegato bene :roll:

Codice:
#include <stdio.h>
int funzione(int n){
    int m;
    if(n==0) return 0;
    else{
        scanf("%d",&m);
        if(n!=m*3){
            return funzione(m);
        }
        else return 1+funzione(m);
    }
}
int main() {
    int n;
    scanf("%d",&n);
    printf("Il numero di interi è:%d\n",funzione(n));
    return 0;
}
nick_10
Average Member
Average Member
 
Messaggio: 327 di 754
Iscritto il: 17/11/2016, 16:21

Re: [C] Esercizio funzione ricorsiva

Messaggioda apatriarca » 22/11/2018, 01:51

Il problema è lo stesso dell'altra discussione. E' in qualche modo necessario passare il valore precedente alla funzione, normalmente facendo uso di una funzione ausiliaria. In questo caso avresti quindi una funzione che legge il primo valore e poi restituisce il risultato della chiamata ricorsiva della funzione che hai scritto.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5155 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Esercizio funzione ricorsiva

Messaggioda nick_10 » 22/11/2018, 22:51

Invece di usare un'altra funzione ausiliaria, è sbagliato farlo dal main come ho fatto io?
nick_10
Average Member
Average Member
 
Messaggio: 329 di 754
Iscritto il: 17/11/2016, 16:21

Re: [C] Esercizio funzione ricorsiva

Messaggioda apatriarca » 23/11/2018, 05:37

Se lo fai nel main non c'è modo di riutilizzare la tua funzione nella sua completa funzionalità senza leggere il valore ogni volta.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5156 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Esercizio funzione ricorsiva

Messaggioda nick_10 » 25/11/2018, 11:00

Grazie mille ;)
nick_10
Average Member
Average Member
 
Messaggio: 330 di 754
Iscritto il: 17/11/2016, 16:21


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite