Pytania otagowane jako tail-recursion

Rekursja ogonowa to strategia rekurencyjna, w której funkcja wykonuje pewną pracę, a następnie wywołuje samą siebie. „Ogon” odnosi się do faktu, że rekursja znajduje się na samym końcu funkcji. Wiele - szczególnie funkcjonalnych - kompilatorów języków programowania może przekształcić tego typu wywołania w iterację, co oznacza, że ​​rekurencja ogona w obsługiwanych językach może być używana bez obawy o przepełnienie stosu, niezależnie od liczby wywołań.



19
Jak wyjść z pętli w Scali?
Jak przerwać pętlę? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } Jak przekształcić zagnieżdżone pętle w rekurencję ogona? Z Scala Talk na FOSDEM 2009 http://www.slideshare.net/Odersky/fosdem-2009-1013261 …

20
Zrozumienie rekurencji [zamknięte]
W obecnej formie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi poparte będą faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź centrum pomocy w …

6
Czy Python optymalizuje rekurencję ogona?
Mam następujący fragment kodu, który nie działa z następującym błędem: RuntimeError: przekroczona maksymalna głębokość rekurencji Próbowałem przepisać to, aby umożliwić optymalizację rekurencji ogona (TCO). Uważam, że ten kod powinien był się udać, gdyby miało miejsce TCO. def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, …


8
Jak dokładnie działa rekurencja ogona?
Prawie rozumiem, jak działa rekurencja ogona i jaka jest różnica między nią a normalną rekurencją. Nie rozumiem tylko , dlaczego nie wymaga stosu do zapamiętania adresu zwrotnego. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * …


5
Czy JVM zapobiega optymalizacji wywołań końcowych?
Widziałem ten cytat dotyczący pytania: Jaki jest dobry język funkcjonalny, na którym można zbudować usługę internetową? W szczególności Scala nie obsługuje eliminacji wywołań ogonowych, z wyjątkiem funkcji samorekursywnych, co ogranicza rodzaje kompozycji, które możesz wykonać (jest to fundamentalne ograniczenie JVM). Czy to prawda? Jeśli tak, co jest takiego w JVM, …

5
Czy Ruby przeprowadza optymalizację wywołań ogona?
Języki funkcjonalne prowadzą do wykorzystania rekurencji do rozwiązywania wielu problemów, dlatego wiele z nich wykonuje Tail Call Optimization (TCO). TCO powoduje, że wywołania funkcji z innej funkcji (lub samej siebie, w którym to przypadku ta funkcja jest również znana jako eliminacja rekurencji ogona, która jest podzbiorem TCO), jako ostatni krok …



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.