Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1

    Ricorsione vs Iterazione

    Quando conviene usare l'iterazione e quando la ricorsione???



    Tnk
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558
    L'iterazione si usa quando devi ripetere qualcosa ( ad esempio i cicli FOR).

    La ricorsione, se non sbaglio, è quando ua funzione al suo interno richiama se stessa. L?esempio classico è quella del fattoriale

    Cmq le iterazioni sono molto + usate delle ricorsioni

  3. #3
    codice:
     
    /*
    					Ricerca binaria
    Funzia su array ordinati precendentemente
    
    */
    
    template<class T>
    void bin_search(const T a[], int first, int last, T target, bool& found, int& index)
    {
        int centro;
        if (first > last) 
        	found = false;
        else
        {
            centro = (first + last)/2;
            if (target == a[centro]) // META
    	  { 
    		found = true;
     		index = centro;
    	  }
    	  // PARTE SINISTRA
            else if (target < a[centro]) bin_search(a, first, centro - 1, target, found, index);
    	  // PARTE DESTRA 
            else if (target > a[centro]) bin_search(a, centro + 1, last, target, found, index);
            
        }
    }
    Se mi ricrei questa in iterativa ti spiego perche secondo me le ricorsive sono meglio
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558
    Io non ho detto che le iterazioni sono le migliori. Ci sono casi in cui sono + adatte ,altre no.

    Per quando riguarda la funzione che hai postato, perdonami, ma non ho proprio capito cosa dovrebbe ordinare... Puoi spiegarmelo?

    Poi c'è una riga che mi è misteriosa:

    template<class T>


  5. #5
    è una funz di ricerca binaria su array.
    template<class T> è un template C++
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    La ricorsione se usata con cervello di evita righe e righe di codice, ma ha il difettuccio di portare via tanta memoria (crea un''istanza' della funzione ogni volta)

    A parte il solito esempio di Fibonacci guardati Quicksort, se nn ricordo male è ricorsivo.


    Io lo feci all'esame di programmazione, i prof apprezzarono parekkio la cosa rispetto all'iterazione :metallica
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Qualsiasi codice iterativo è anche riesprimibile in modo ricorsivo (l'iterazione, infatti, si chiama ricorsione di coda) e, (quasi) viceversa.

    La ricorsione ha il difetto di portare via memoria, ma ha l'enorme pregio di semplificare la stesura del codice: uno o più casi base e una chiamata ricorsiva, come si fa per le induzioni.

    Esistono, tuttavia, dei casi che sono risolvibili esclusivamente tramite ricorsione (almeno, non ho trovato soluzioni iterative): uno, per esempio, è il calcolo del determinante di una matrice di ordine qualsiasi. L'esempio postato da Luc@s anche: una ricerca binaria su di un albero di altezza arbitraria, non è risolvibile (così facilmente) in modo iterativo... puntatori e via dicendo non sono certo un modo semplice di risoluzione del problema.

    Il QuickSort è una delle più famose funzioni ricorsive che esistano.
    codice:
    Quicksort (A, p, r) {
       q = Partition(A, p, r);
       QuickSort(A, p, q);
       QuickSort(A, q+1, r);
    }
    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

  8. #8
    lo sto studiando ora sul Sedgewick il quicksort
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  9. #9
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    A me sembra che invece ogni problema ricorsivo può essere risolto con l'iterazione.
    E' abbastanza complicato perchè devi crearti tu uno stack.



    P.S. Facciamo 1 bel thread sugli algoritmi di ordinamento?

  10. #10
    Originariamente inviato da iguana13


    P.S. Facciamo 1 bel thread sugli algoritmi di ordinamento?
    Ottima idea.
    Partiamo dal Bubble.
    Poi segnalalo al Mod e lo mettiamo tra le pillole
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

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.