У меня есть выражение последовательности следующим образом:Переполнение стека и рекурсивная последовательность выражений F #
let fibSeq =
let rec fibSeq' a b =
seq { yield a
yield! fibSeq' b (a + b) }
fibSeq' 1 1
Теперь даже для больших чисел, это не генерировать переполнение стека. Мне интересно, почему, мне кажется, что для генерации чисел Фибоначчи с этим выражением последовательности каждый рекурсивный вызов должен был вернуться обратно к вызывающему абоненту, чтобы в конечном итоге «свернуть» себя в последовательность. Здесь есть какая-то оптимизация?
[Этот вопрос] (http://stackoverflow.com/questions/15864670/generate-tail-call-opcode), наряду с ответами на него, содержит довольно подробную информацию о генерации кода IL. – bytebuster