Kiedy zaczynałem uczyć się seplenienia, natknąłem się na termin rekurencyjny . Co to dokładnie
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ń.
Kiedy zaczynałem uczyć się seplenienia, natknąłem się na termin rekurencyjny . Co to dokładnie
Po prostu, czym jest optymalizacja połączeń ogonowych? Mówiąc dokładniej, jakie są małe fragmenty kodu, w których można je zastosować, a gdzie nie, z wyjaśnieniem,
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...
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,...
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,...
Wydaje mi się, że optymalizacja rekurencji ogonowej zarówno w C, jak i C ++ działałaby doskonale, ale podczas debugowania nigdy nie widzę stosu ramek, który wskazuje na tę optymalizację. To trochę dobrze, ponieważ stos mówi mi, jak głęboka jest rekursja. Jednak optymalizacja też byłaby miła. Czy...
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 *...
Znalazłem to pytanie, które języki optymalizują rekurencję ogonów. Dlaczego C # nie optymalizuje rekurencji ogonowej, jeśli jest to możliwe? W konkretnym przypadku, dlaczego ta metoda nie jest zoptymalizowana w pętli ( 32-bitowy program Visual Studio 2008 , jeśli ma to znaczenie) ?: private...
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...
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...
Mam rekurencyjny algorytm znajdowania ścieżki ogona, który zaimplementowałem w JavaScript i chciałbym wiedzieć, czy którakolwiek (wszystkie?) Przeglądarki prawdopodobnie otrzymają wyjątki przepełnienia stosu.
Odkryłem dzisiaj polecenie „time” w Uniksie i pomyślałem, że użyję go do sprawdzenia różnicy w czasie wykonywania między ogonowymi funkcjami rekurencyjnymi a normalnymi rekurencyjnymi funkcjami w Haskellu. Napisałem następujące funkcje: --tail recursive fac :: (Integral a) => a -> a fac...
Oto fragment kodu z dokumentacji dla fs2 . Funkcja gojest rekurencyjna. Pytanie brzmi: skąd wiemy, czy można je bezpiecznie nakładać i jak uzasadnić, czy jakakolwiek funkcja jest bezpieczna w stosie? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n:...