Хвостовая рекурсия с Groovy

Я кодировал 3 факторных алгоритма:

Во-первых, я ожидаю провала из-за переполнения стека. Нет проблем.Во вторых я стараюсьрекурсивный вызов, преобразуйте предыдущий алгоритм из рекурсивного в итеративный.Это не работает, но я не понимаю, почему.В-третьих, я используюtrampoline() метод и работает нормально, как я ожидаю.
def factorial

factorial = { BigInteger n ->
    if (n == 1) return 1
    n * factorial(n - 1)
}
factorial(1000)  // Stack Overflow

factorial = { Integer n, BigInteger acc = 1 ->
    if (n == 1) return acc
    factorial(n - 1, n * acc)
}
factorial(1000)  // Stack Overflow, why???

factorial = { Integer n, BigInteger acc = 1 ->
     if (n == 1) return acc
     factorial.trampoline(n - 1, n * acc)
}.trampoline()
factorial(1000)  // It works

Ответы на вопрос(2)

Ваш ответ на вопрос