Как отмечает Мартин, вы не получите TCO в любом случае, если не включите оптимизатор (-O
), но даже в этом случае нет способа гарантировать, что вы получите TCO, и поэтому вы действительноне могу на это рассчитывать.Swift не особенно дружелюбен к рекурсивным алгоритмам.Обычно вы пишете это следующим образом:
func sum(n: Int) -> Int {
return (1...n).reduce(0, +)
}
Или для сохранения той же самой вычислительной схемы (т. Е. С обратным отсчетом от n до 1):
func sum(n: Int) -> Int {
return (1...n).reversed().reduce(0, +)
}