Credo che tutti i problemi che hanno una logica iterativa possano essere risolti usando le iterazioni, ma possiamo risolvere qualsiasi problema usando la ricorsione? La ricorsione può sempre sostituire l'iterazione? Per favore fornisci una prova alla tua risposta se puoi. Supponiamo anche di avere uno stack infinito o di eseguire il programma su una macchina di Turing. Non mi interessa se questa prova è una prova teorica. (è per questo che ho menzionato la Turing Machine)Recursion Vs Iteration
risposta
Sì, la ricorsione può sempre sostituire l'iterazione, questo è stato discusso before. Citando dal post collegato:
Poiché è possibile creare un linguaggio completo di Turing utilizzando strutture iterative rigorose e un linguaggio di tornitura completo utilizzando solo strutture ricorsive, quindi i due sono quindi equivalenti.
Spiegando un po ': sappiamo che qualsiasi problema computabile può essere risolto da una macchina di Turing. Ed è possibile costruire un linguaggio di programmazione A
senza ricorsione, che è equivalente a una macchina di Turing. Allo stesso modo, è possibile creare un linguaggio di programmazione B
senza iterazione, uguale in potenza di calcolo a una macchina di Turing.
Pertanto, se entrambi A
e B
sono Turing-complete, possiamo concludere che per ogni programma iterativo deve esistere un programma ricorsivo equivalente e viceversa. Questo è un risultato teorico, nel senso che non fornisce alcun suggerimento su come derivare un programma ricorsivo da un programma iterativo arbitrario, o viceversa.
Grazie per aver perso questo link quando ho cercato sul sito web –
Sì. Esiste un tipo di ricorsione chiamato tail recursion, che è direttamente traducibile in iterazione. Uno può essere convertito all'altro senza alcun problema. Pertanto, tutte le soluzioni iterative possono essere convertite in soluzioni ricorsive.
In effetti, molti compilatori possono rilevare che si sta eseguendo la ricorsione in coda e quindi convertirlo in codice di tipo ciclo per efficienza.
Una ricorsione deve essere utilizzata quando un ciclo non è necessario, ma il metodo deve ripetersi in un determinato caso. Ad esempio, zippare una cartella. Se c'è una sottocartella, dovrebbe chiamarsi (ricorsiva). La ricorsione potrebbe sostituire le iterazioni se lo si desidera, ma non è raccomandato. Molte persone usano solo le iterazioni e usano le ricorsioni solo quando sono necessarie.
- 1. std :: list vs std :: vector iteration
- 2. catch forEach iteration
- 3. Delphi TDictionary iteration
- 4. msbuild array iteration
- 5. java hashmap key iteration
- 6. StackOverflowException causato da Recursion
- 7. Ruby recursion issue
- 8. Recursion on Fibonacci Sequence
- 9. Recursion of for
- 10. Algorithm/Recursion tree challenge
- 11. python now, next, n iteration
- 12. Google Collections ImmutableMap iteration order
- 13. Haskell - Pattern Matching and Recursion
- 14. Factorial using Recursion in Java
- 15. Array di base Iteration in Ruby
- 16. C++ REST SDK (Casablanca) web :: json iteration
- 17. Differenza tra Left Factoring e Left Recursion
- 18. IEnumerable and Recursion using yield return
- 19. Partizionare un seq - Recursion in Clojure (o Lisp in generale)
- 20. Scala: Tree Insert Tail Recursion with Complex Structure
- 21. L'ordine di std :: set iteration è sempre crescente in base alle specifiche C++?
- 22. C++ Saltare il resto della corrente `for` iteration e iniziarne una nuova.
- 23. E 'possibile rimuovere campi con * RECURSION * quando si usa toArray() in Propel?
- 24. ID vs UniqueID vs ClientID vs UniqueClientID vs StaticClientID?
- 25. VS 2008 vs VS 2008 Express
- 26. .NET vs ASP.NET vs CLR vs ASP
- 27. Atomikos vs JOTM vs Bitronix vs?
- 28. Accumulare vs piega vs ridurre vs comprimere
- 29. ACE vs Boost vs Poco vs wxWidgets
- 30. VS 2013 MSTest vs nUnit vs xUnit
Qualcuno può correggermi qui, ma non sono alcune lingue ("lingue puramente funzionali") * completamente basate * sulla ricorsione? Lingue Lisp per esempio? –
@TonyR Le lingue Lisp non sono affatto funzionali. –
Allora che ne dici di "lingue funzionali?" –