Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [PASCAL]funzioni ricorsive

    Salve ragazzi volevo sciogliere un dubbio riguardo ad una funzione ricorsiva:

    Se ho una cosa del tipo:

    codice:
    function foo(parametri...)
    
      if ( condizione1 )
      ..
        if( condizione2 )
           ..
           foo(parametri...)
        else <<<<<<<
           ..
           ..
        endif
       else
          foo(parametri...)
       endif
    end
    Volevo capire una cosa:
    Nel momento in cui la "condizione2" è true, io entro nell'if e richiamo la function "foo"(ricorsivamente), quando la condizione 2 diventerà falsa, entro nell'else(<<<<<<<) oppure no?

    Grazie anticipatamente
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai notato che ci sono due if?

    In quella else che hai segnato ci entrerà solo se

    condizione1 è vera e condizione2 è falsa
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Si perfetto , grazie , avevo proprio dimenticato quell'if,
    Oregon ma nel caso in cui avessi una cosa del tipo:

    codice:
    function foo(parametri...)
         if(foo(parametri...))
              <istruzioni>
         else
              <istruzioni>
         endif
    end
    l'if ha come condizione la chiamata ricorsiva a foo, quando sarà vero, quando sarà falso?


    Grazie.
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Tu sai come una funzione in Pascal restituisce un valore al chiamante?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    <nomefunzione>:=<valore> ???
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    C'è questa function per verificare se un albero è perfettamente bilanciato:

    codice:
    bilanciato(root, 0, -1)
    
    function bilanciato(root, altezza, h_temp)
    
    	if(root = NULL) then
    		if(altezza = 0)
    			altezza=h_temp
    		else if(altezza != h_temp)
    			bilanciato := false
    		endif
    
    		bilanciato:=true
    	endif
    
    	if( (bilanciato(root->left, height, h_temp+1) )
    		bilanciato(root.right, altezza, h_temp+1)
    	endif
    
    	bilanciato:=false;
    end
    Vorrei sapere come funziona questa parte.
    codice:
    	if( (bilanciato(root->left, height, h_temp+1) )
    		bilanciato(root.right, altezza, h_temp+1)
    	endif
    Inizialmente supponiamo di avere la root che è != NULL, entra nel secondo if e cosa succede?
    Con i sogni possiamo conoscere il futuro...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E quindi la funzione restituirà vero o falso quando lo vorrai tu inserendo quella linea nel ramo di codice che ti interessa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Perdonami oregon, non riesco a capire.

    esegue:
    codice:
    if( (bilanciato(root->left, height, h_temp+1) )
    Richiama la function andando sempre verso il lato sinistro(root->left), smette di entrare nell'if quando root=NULL? e quando esegue:
    codice:
    bilanciato(root.right, altezza, h_temp+1)
    Inoltre io sò che quando assegno un valore alla function tipo: "bilanciato:=true", il processo ricorsivo conclude, restituendo il valore, è così?
    Con i sogni possiamo conoscere il futuro...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se hai preso quella funzione da un esempio in C ricordati che in C il

    return

    restituisce il valore e termina la funzione.

    In Pascal

    bilanciato:=true

    restituisce il valore ma NON termina la funzione.
    Dovrai inserire una

    exit

    per farlo.

    P.S. Ma che Pascal usi ...? Come mai quelle endif ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    In realtà è P-LIKE un pseudolinguaggio usato alla federico II di napoli. Solo qui lo usiamo =D. E' simile al pascal. Comunque io volevo sapere logicamente e fisicamente cosa succedeva quando eseguivo:

    codice:
     if(foo(parametri...))
                       foo(parametri...)
                endif
    Con i sogni possiamo conoscere il futuro...

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.