PDA

Visualizza la versione completa : [C] Una domanda su una funzione ricorsiva


Downloader
23-04-2008, 15:53
Ciao,

sto provando a fare il seguente esercizio:


- Sia data una lista concatenata semplice L di interi. Scrivere una o piu' funzioni, descrivendone sempre pre e post-condizione, che data L e un puntatore p ad un elemento della lista, produca in stampa su schermo:

1) tutti gli elementi dall’elemento puntato da p alla fine della lista in ordine inverso
2) tutti gli elementi dalla testa della lista all’elemento precedente quello puntato da p sempre in ordine inverso

Esempio:
Sia L la lista 2->4->1->7->20->3->5->9->NULL e supponiamo che p punti all’elemento 20.
Output: 9,5,3,20,7,1,4,2.


Mi sto concentrando sul punto1 (tanto il 2o è uguale...) e ho pensato al seguente codice:



void p1 (list *p)
{
if (p == NULL)
return;
else
p1(p->next);

printf("%i,p->d);

}


Fatta cosi ricorsivamente va bene??
Non mancherà un return dopo il printf? (questo è il grande dubbio)
Secondo me no.


Grazie

oregon
23-04-2008, 16:19
Per una funzione void il return alla fine non e' necessario ...

Downloader
23-04-2008, 16:23
Quindi il codice che ho scritto è corretto?
Gira secondo te?

wgd-developer
23-04-2008, 17:16
scusa, ma non ho capito l'esempio...

oregon
23-04-2008, 17:18
Originariamente inviato da Downloader
Quindi il codice che ho scritto è corretto?
Gira secondo te?

Ma tu non li provi i codici che scrivi?

Downloader
23-04-2008, 17:30
Sto provando a fare tutto senza compilatore prima...
ai compiti mica posso urarli...

oregon
23-04-2008, 17:34
D'accordo ... ma questo non vale per le esercitazioni che fai "a casa" ...

Scrivi il codice, poi compilalo ... del resto, per te, che differenza c'e' tra il controllo con il compilatore e una mia risposta?

Downloader
23-04-2008, 17:52
Originariamente inviato da oregon
D'accordo ... ma questo non vale per le esercitazioni che fai "a casa" ...

Scrivi il codice, poi compilalo ... del resto, per te, che differenza c'e' tra il controllo con il compilatore e una mia risposta?

Si si certo.

mondobimbi
24-04-2008, 15:26
Originariamente inviato da Downloader
...



void p1 (list *p)
{
if (p == NULL)
return;
else
p1(p->next);

printf("%i,p->d);

}


Fatta cosi ricorsivamente va bene??
Non mancherà un return dopo il printf? (questo è il grande dubbio)
Secondo me no.


Grazie

il return porta l'esecuzione alla fine della funzione e spesso, se la funzione è complessa, non aiuta alla compressione della logica utilizzata, un po' come i salti incondizionati.

Un modo più elegante per scrivere la tua funzione è


void p1 (list *p)
{
if (p != NULL) {
p1(p->next);
printf("%d\n", p->d);
}
}



devi poi chiudere le virgolette nella printf ed eventualmente aggiungere un salto riga in modo che i numeri non ti vengano stampati tutti attaccati-

Loading