Факториал равен произведению чисел от 1 до n, причём 0! = 1. Для фиксированного целого типа нужно отдельно обрабатывать отрицательный ввод и переполнение.
Вычисление факториала числа
Факториал равен произведению чисел от 1 до n, причём 0! = 1. Для фиксированного целого типа нужно отдельно обрабатывать отрицательный ввод и переполнение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, которая принимает целое число и возвращает его факториал.
Ответ
Факториал равен произведению чисел от 1 до n, причём 0! = 1. Для фиксированного целого типа нужно отдельно обрабатывать отрицательный ввод и переполнение.
Пример на Swift с результатом UInt64:
func factorial(_ n: Int) -> UInt64? {
guard n >= 0 else { return nil }
if n < 2 { return 1 }
var result: UInt64 = 1
for value in 2...n {
let next = result.multipliedReportingOverflow(by: UInt64(value))
guard !next.overflow else { return nil }
result = next.partialValue
}
return result
}
Для n от 0 до 20 результат помещается в UInt64, начиная с 21 функция вернёт nil. Для больших точных значений нужен тип произвольной точности. Итеративный вариант не расходует стек рекурсии; память постоянная.