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

    programmare ricorsivamente

    Ciao,
    è da poco che ho cominciato a programmare (in scheme...) e non ho ancore capito cosa significa programmare in maniera ricorsiva qualcuno me lo può spiegare in maniera semplice?
    grazie

  2. #2
    Se ti rifersici alle funzioni ricorsive, una funzione ricorsiva è una funzione che richiama sé stessa. Un esempio classico è una funzione per il calcolo del fattoriale di un numero.
    codice:
    long fattoriale(long numero)
    {
        if(numero==1)
            return 1;
        else
            return numero*fattoriale(numero-1);
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di iiba88
    Registrato dal
    May 2008
    Messaggi
    11
    Allroa programmare ricorsivamente è un metodo usato per semplificare la vita del programmatore,cioè aliminando l'uso dei cicli iterativi che in alcuni casi rendono la vita difficile.

    ad esempi oci sono dei problemi che possono essere risolti con entrambi i modi solo che con la ricorsione possono bastare poche righe di codice perche viene richiamata la funzione come ha detto MItaly cio significa che noi prima dobbiamo analizzare il problema.
    una volta analizzato il problema bisogna individare un caso base:Un caso base è un problema simile a quello di partenza soltanto che è molto piu semplice ad esempio se abbiamo un vettore di 10 elementi e in questo vettore noi vohliamo ricercare l'elemento minimo il caso base sarà quando abbiamo un vettore o vuoto oppure unvettore di un solo elemento e in questo caso siamo sicuri che l'elemento minimo è l'elemento stesso.
    quindi noi da un vettore di dieci elementi dobbiamo ricondurci a questo caso base come possiamo procedere:
    1.dividendo il vettore in due primo elemento e poi tutto il resto(mi segui??)una volta diviso cosi il vettore contenente il primo elemento rappresenta un caso base e tutto il resto lo vedremo tra un po.ora dobbiamo considerare che la seconda parte del vettore venga risolta correttamente richiamando la funzione ricorsivamente,questo cosa fa richiamando la funzione ricorsivamente invia alla funzione il vettore senza il primo elemento(se nonsai come fare te lo spiego) basta inviare l'indice incrementato di 1 e cosi via il compilatore arriverà ad un cas base e poi confornta tutti i casi base e alla fine restituisce una soluzione.

    Non so se sono stato molto chiaro ma ho studiato questo elemento da poco e ti ringrazio di aver fatto questa domanda cosi ho anche ripetuto un po in vista dell'esame di algoritmi e strutture dati
    Un ingegnera deve avere sempre la soluzione giusta ed efficiente!!!

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Si dovrebbe evitare di risolvere problemi come il calcolo del fattoriale con la ricorsione, per non incorrere in un numero potenzialmente esplosivo di chiamate ricorsive.

    Permettetemi di fare un appunto prestazionale trovato sul mio libro di testo (si, vi ho rotto le balle con le prestazioni)
    Ricorsione e iterazione si basano su una struttura di controllo: rispettivamente selezione e iterazione. L'iterazione finisce quando si trova la condizione giusta, la ricorsione quando si arriva al caso base.
    La ricorsione ha molti lati negativi: il numero di chiamate di funzione è generalmente alto, e ciò rappresenta un costo in termini di tempo di elaborazione e di memoria utilizzata (sapete tutti perchè).
    L'iterazione è invece limitata ad una sola chiamata di funzione, per cui non vi è nè un eccesso di tempo di elaborazione nè un consumo eccessivo di memoria. A questo punto ci si chiede perchè utilizzare la ricorsione...

    Qualsiasi problema che ha una soluzione ricorsiva, ne ha anche una iterativa, quindi sarebbe da evitare in software in cui la velocità (ma nemmeno) è un punto importante.

    Bene si imparare l'argomento, e usarlo anche qualche volta se la ricorsione rispecchia il metodo piu' naturale per risolvere il problema indicato, ma niente di piu'.

    In pratica non usate la ricorsione.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it L'avatar di iiba88
    Registrato dal
    May 2008
    Messaggi
    11
    non sono d'accordo per niente, esistono dei casi in cui la ricorsione è molto piu efficade dell'iterazione e dei casi inversi,l'iterazione ti limita ad un ciclo con un acondizione e in molti casi ben difficile da implementare.
    Prendiamo ad esempio gli alberi????
    con implementazione ricorsiva hanno una complessità computazionele log n che è bassissima quindi bisogna vedereil contesto in cui si ci trova e le esigenze non partire prevenuti nel dire NON USARE LA RICORSIONE perche è una cavolat a mio avviso!!!

    anche io appena ho intrapreso l'argomento della ricorsione non mi andava molto gio ma ora sto iniziando a capire che è molto piu elegante e lineare rispetto all'iterazione
    Un ingegnera deve avere sempre la soluzione giusta ed efficiente!!!

  6. #6
    Vero che ogni algoritmo ricorsivo può essere trasformato in iterativo, ma da qui a sconsigliarne l'uso, mi pare decisamente eccessivo. Per quanto riguarda le prestazioni, spesso il suo peso è ininfluente, quindi di fatto rende inutile la fatica nella trasformazione in iterativa.
    Nella meta programmazione, la ricorsione è praticamente l'unica attuabile.

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da iiba88
    non sono d'accordo per niente, esistono dei casi in cui la ricorsione è molto piu efficace dell'iterazione
    Che vuoi dire per efficace? Veloce in termini di scrivere? Prestazioni?

    Prendiamo ad esempio gli alberi????
    Io mi riferivo alle funzioni.

    anche io appena ho intrapreso l'argomento della ricorsione non mi andava molto giù
    Non evito la ricorsione perchè non mi va giù.

    è molto piu elegante e lineare rispetto all'iterazione
    Vero, ma nella pratica, se il codice è piu' elegante non influisce per niente.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da MacApp
    Vero che ogni algoritmo ricorsivo può essere trasformato in iterativo, ma da qui a sconsigliarne l'uso, mi pare decisamente eccessivo. Per quanto riguarda le prestazioni, spesso il suo peso è ininfluente, quindi di fatto rende inutile la fatica nella trasformazione in iterativa.
    Nella meta programmazione, la ricorsione è praticamente l'unica attuabile.
    Era solo un appunto del mio libro.
    Però noto che tu parli di trasformare una ricorsione in un'iterazione.
    Bhè, non so voi, ma a me, quando progetto qualcosa, non viene mai in testa una soluzione di tipo ricorsiva (parlando delle funzioni).
    Sarà perchè non sono tanto esperto dell'ambiente e perchè con gli alberi non ho avuto ancora a che fare. Ho solo bazzicato un pò con la STL
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it L'avatar di iiba88
    Registrato dal
    May 2008
    Messaggi
    11
    allora se vuoi tiposso spiegare che cos'è un albero o che cos'è una funzione perche mi sembra che questo concetto non ti è molto chiaro o sbaglio???
    io ho detto prendiamo come esempio gli alberi...gli alberi sono delle strutture utilizzate come le liste,pile tabelle hasc,code etc..

    le funzioni sono dei sottoprogrammi che semplificano l'utilizzo del linguaggio al programmatore riutilizzando il codice gia scritto che è al primo posto per la carriera di un buon programmatore.

    Quindi perche vieni a dirmi citando la mia frase io mi riferivo alle funzioni???ma stai dando i numeri?? che c'entrano le funzioni con gli alberi??
    Un ingegnera deve avere sempre la soluzione giusta ed efficiente!!!

  10. #10

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.