Pytania oznaczone «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ń.

276
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...

225
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,...

121
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 *...

99
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...