Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [pascal] ricorsività delle procedure

    è possibile la ricorsività delle procedure in pascal?
    cm si fa?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    E' possibile la ricorsività delle funzioni. La ricorsività delle procedure è abbastanza inutile visto che non ritornano alcun valore.
    Per effettuare la ricorsività delle funzioni basta far in modo che la funzione richiami se stessa per elaborare un risultato intermedio. L'esempio più classico è il fattoriale.

    Il fattoriale di n (con n appartenente ai numeri NATURALI) è definito nel modo seguente:

    1) Il fattoriale di 0 è 1
    2) Il fattoriale di n è n * il fattoriale di (n-1).
    codice:
    function fattoriale(n : integer) : integer;
    var risultato : integer;
    begin
       if (n = 0) then
          risultato := 1;
       else
          risultato := n * fattoriale(n-1);
    
       fattoriale := risultato;
    end;
    In alternativa è possibile utilizzare le procedure, ma in questo caso non si parlerebbe più di ricorsione, ma di esecuzione sequenziale. La funzione precedente si potrebbe tradurre mediante l'uso di una procedura ad hoc, che usa una variabile globale per accumulare il risultato ad ogni chiamata. Considera questo programma:
    codice:
    program fatt;
    var x : integer;
    
       procedure fattoriale(y : integer);
       begin
          if (y > 0) then
          begin
             x := x * y;
             fattoriale(y-1);
          end;
       end;
    
    begin
       x := 1;
       fattoriale(5);
       writeln('Il fattoriale di 5 è: ', x);
    end.
    Questo programma calcola il fattoriale di 5, ma deve far uso di una variabile globale per accumulare il risultato fra una chiamata e l'altra della procedura. In questo caso non c'è ricorsione, in quanto sarebbe sufficiente chiamare SEQUENZIALMENTE per 5 volte la procedura fattoriale, decrementando ogni volta il valore del parametro, per ottenere lo stesso risultato (il fatto che sia la procedura stessa ad effettuare la chiamata non è sufficiente a definire la ricorsione).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    La ricorsività delle procedure non è "inutile"...

    Pensa ad una procedura che permette la rimozione di una directory eliminando, ricorsivamente s'intende, tutte le cartelle contenute in essa, e tutte le sottocartelle all'interno delle cartelle e così via...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    In effetti stavo pensando di modificare il mio post quando ho ripensato all'iterazione. L'iterazione non è nient'altro che una ricorsione di coda. Poi, però, era scaduto il tempo massimo per effettuare la modifica ed il mio tempo "libero" per effettuare un secondo post di rettifica.

    Nel momento in cui ho scritto quel post, in realtà, stavo pensando alla ricorsione pura, quella cioè, che prevede un puntatore di catena dinamica nella sequenza di chiamate dello stack.

    Ammetto, quindi, che non è poi per niente inutile. :gren:

    Per 9178angel: ora hai degli elementi in più su cui pensare: ricorsione nelle funzioni (quella più usata, soprattutto negli esercizi di programmazione) e la ricorsione nelle procedure.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie mille!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Sapete cosa si intende per ricorsione mutua?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.