Jak działa @tailrec

Używałem i czytałem o@tailrec adnotacja mająca rekurencyjną metodę ogona. Przeszedłem przez wiele linków, które to wyjaśniają. Na przykład działa tylko wtedy, gdy funkcje wywołujące się same nie powinny być zastępowane itd.

Wszędzie wspomina się, żecompiler optimizes. Ale co magia / koncepcja robi kompilator, aby uczynić go rekurencyjnym. Dla prostej funkcji poniżej, co robi kompilator:

@tailrec def fact(acc: Int, n: Int): Int = {
  if (n <= 1) acc
  else fact(n * acc, n - 1)
}
fact(1,10)

To znaczy, czy konwertuje go do pętli, w której wielokrotnie go wywołuje, a następnie zwraca wartość końcową? Czy jest jakiś link do papieru, który to wyjaśnia

questionAnswers(2)

yourAnswerToTheQuestion