Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3559214
А
Аноним
03 февраля 2026 18:29 · публичный вопрос
А
Аноним

Факториалом неотрицательного целого числа N называется произведение всех целых чисел от 1 до N. Обозначается так: N! Для N = 0 значение факториала считается равным единице: 0! = 1…

Запрос пользователя

Факториалом неотрицательного целого числа N называется произведение всех целых чисел от 1 до N. Обозначается так: N! Для N = 0 значение факториала считается равным единице: 0! = 1 Напиши программу на python, которая по целому неотрицательному числу N с помощью рекурсивной функции вычислит N!

Ответ нейросети
03 февраля 2026 18:29

Вот подробное решение и готовая программа на 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, либо перейти к итеративному решению. Но для целей учебной задачи и понимания рекурсии приведенный код подходит.