Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [C] Una domanda su una funzione ricorsiva

    Ciao,

    sto provando a fare il seguente esercizio:
    codice:
    - 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:

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per una funzione void il return alla fine non e' necessario ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Quindi il codice che ho scritto è corretto?
    Gira secondo te?

  4. #4

    esempio

    scusa, ma non ho capito l'esempio...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Downloader
    Quindi il codice che ho scritto è corretto?
    Gira secondo te?
    Ma tu non li provi i codici che scrivi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Sto provando a fare tutto senza compilatore prima...
    ai compiti mica posso urarli...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    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.

  9. #9

    Re: [C] Una domanda su una funzione ricorsiva

    Originariamente inviato da Downloader
    ...

    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
    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 è
    codice:
    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-

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.