Задача Задача №3559214
А
А
Вот подробное решение и готовая программа на Python. Задача: вычислить N! рекурсивно, для неотрицательного N.
Что делает программа:
- Определяем рекурсивную функцию factorial(n).
- Базовый случай: n равно 0 или 1, возвращаем 1 (0! = 1, 1! = 1).
- Рекурсивный шаг: n! = n × (n−1)!.
- Вводим проверку на неотрицательность: если введено отрицательное число, выводим сообщение об ошибке.
- Время выполнения O(n), потребление памяти O(n) из-за глубины рекурсивных вызовов.
Пояснение примера:
- 5! = 5 × 4! = 5 × 4 × 3! = 5 × 4 × 3 × 2! = 5 × 4 × 3 × 2 × 1! = 5 × 4 × 3 × 2 × 1 = 120.
- 0! = 1 по определению.
Код:
def factorial(n: int) -> int:
# Проверка на неотрицательность
if n < 0:
raise ValueError("n must be a non-negative integer")
# Базовый случай: 0! = 1 и 1! = 1
if n <= 1:
return 1
# Рекурсивный шаг: n! = n * (n-1)!
return n * factorial(n - 1)
def main():
try:
n_input = input("Введите неотрицательное целое N: ").strip()
n = int(n_input)
except ValueError:
print("Ошибка: введено не целое число.")
return
if n < 0:
print("Ошибка: N должен быть неотрицательным.")
return
result = factorial(n)
print(f"{n}! = {result}")
if __name__ == "__main__":
main()
Примеры использования:
- Ввод: 5 → Вывод: 5! = 120
- Ввод: 0 → Вывод: 0! = 1
Замечание:
- Для больших N рекурсия может превышать глубину стека Python (обычно около 1000 вызовов). В таком случае можно либо увеличить предел рекурсии с помощью sys.setrecursionlimit, либо перейти к итеративному решению. Но для целей учебной задачи и понимания рекурсии приведенный код подходит.