Нужен рабочий код по Python
Задача на программирование
Посчитайте факториал числа n! по формуле ниже:
�
!
=
1
∗
2
∗
3
∗
4
∗
.
.
.
∗
�
n!=1∗2∗3∗4∗...∗n
Например для входного числа 5 алгоритм расчета следующий:
5
!
=
1
∗
2
∗
3
∗
4
∗
5
=
120
5!=1∗2∗3∗4∗5=120
Sample Input 1:
5
Sample Output 1:
120
Sample Input 2:
0
Sample Output 2:
1
Sample Input 3:
1
Sample Output 3:
1
Sample Input 4:
2
Sample Output 4:
2
def factorial(x):
if x == 0:
return 1
return x * factorial(x - 1)
n = int(input())
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(factorial)
Вот решение задачи на Python с подробным объяснением:
def factorial(n):
# Базовые случаи
if n == 0:
return 1
elif n < 0:
raise ValueError("Факториал определен только для неотрицательных чисел")
# Инициализация результата
result = 1
# Умножение всех чисел от 1 до n
for i in range(1, n + 1):
result *= i
return result
# Примеры использования:
print(factorial(5)) # 120
print(factorial(0)) # 1
print(factorial(1)) # 1
print(factorial(2)) # 2
Объяснение решения:
Алгоритм:
Если n = 0, возвращаем 1 (по определению 0! = 1)
Если n < 0, выбрасываем ошибку
Иначе умножаем все числа от 1 до n
Особенности:
Используем цикл for для перемножения чисел
Результат храним в переменной result
На каждой итерации умножаем текущее число на накопленный результат
Альтернативное рекурсивное решение:
def factorial_recursive(n):
if n == 0:
return 1
return n * factorial_recursive(n - 1)
Важные моменты:
Факториал растет очень быстро
Для больших n может потребоваться использование больших чисел
При n > 20 результат уже не помещается в стандартный int
Оптимизация:
Можно использовать memoization для хранения промежуточных результатов
Для больших чисел стоит использовать библиотеку math с функцией factorial
Проверка корректности:
Факториал всегда положительный
Факториал целого неотрицательного числа всегда целое число
0! = 1 по определению
Это базовое решение, которое можно модифицировать под конкретные требования, например, добавив обработку больших чисел или оптимизацию для часто вызываемых значений.