Pytania otagowane jako tail-call

8
Jakie są metody uniknięcia przepełnienia stosu w algorytmie rekurencyjnym?
Pytanie Jakie są możliwe sposoby rozwiązania problemu przepełnienia stosu spowodowanego przez algorytm rekurencyjny? Przykład Próbuję rozwiązać problem Project Euler 14 i postanowiłem spróbować z algorytmem rekurencyjnym. Jednak program zatrzymuje się z java.lang.StackOverflowError. Zrozumiały. Algorytm rzeczywiście przepełnił stos, ponieważ próbowałem wygenerować sekwencję Collatz dla bardzo dużej liczby. Rozwiązania Zastanawiałem się więc: …

4
Jakie ograniczenia JVM nakłada na optymalizację wezwania ogona
Clojure nie wykonuje optymalizacji ogona na własną rękę: jeśli masz funkcję rekurencji ogona i chcesz ją zoptymalizować, musisz użyć specjalnej formy recur. Podobnie, jeśli masz dwie wzajemnie rekurencyjne funkcje, możesz je zoptymalizować tylko za pomocą trampoline. Kompilator Scala jest w stanie wykonać TCO dla funkcji rekurencyjnej, ale nie dla dwóch …
36 scala  clojure  jvm  tail-call 

2
Optymalizator kombinacji Y i ogona
Definicja kombinatora Y w F # to let rec y f x = f (y f) x f oczekuje, że jako pierwszy argument będzie miała kontynuację rekurencyjnych podproblemów. Używając yf jako kontynuacji, widzimy, że f będzie stosowane do kolejnych wywołań w miarę rozwoju let y f x = f (y …

3
Jakie są alternatywy dla używania stosu do przedstawienia semantyki wywołań funkcji?
Wszyscy wiemy i uwielbiamy, że wywołania funkcji są zwykle realizowane przy użyciu stosu; są ramki, adresy zwrotne, parametry, cała partia. Jednak stos jest szczegółem implementacji: konwencje wywoływania mogą robić różne rzeczy (np. Rejestry szybkiego połączenia x86 używają (niektóre) rejestrów, MIPS i obserwatorzy używają okien rejestrów itd.), A optymalizacje mogą robić …

4
Kiedy nie ma TCO, kiedy martwić się o wysadzenie stosu?
Za każdym razem, gdy pojawia się dyskusja na temat nowego języka programowania ukierunkowanego na JVM, nieuchronnie ludzie mówią takie rzeczy jak: „JVM nie obsługuje optymalizacji wywołania ogona, więc przewiduję wiele eksplodujących stosów” Istnieją tysiące odmian tego tematu. Teraz wiem, że niektóre języki, na przykład Clojure, mają specjalną konstrukcję cykliczną , …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.