Что выведет этот код?


def fact(n):
    if n == 0:
        return 1
    return n * fact(n - 1)

print(fact(4))

Код вычисляет факториал числа 4 рекурсивным способом.

Функция fact(n):

  • Если n равно 0, возвращает 1 (базовый случай рекурсии).
  • Иначе, возвращает n умноженное на результат вызова fact(n-1) (рекурсивный вызов).

При вызове fact(4), произойдут следующие вычисления:

  1. fact(4) вернет 4 * fact(3)
  2. fact(3) вернет 3 * fact(2)
  3. fact(2) вернет 2 * fact(1)
  4. fact(1) вернет 1 * fact(0)
  5. fact(0) вернет 1

В результате, будет вычислено 4 * 3 * 2 * 1 * 1 = 24.

Программа выведет на экран 24.


Задача: Реализовать функцию для вычисления факториала числа с использованием рекурсии.

Решение на Python:


  def fact(n):
    if n == 0:
      return 1
    return n * fact(n - 1)

  print(fact(4))
  

Разбор решения:

  • Функция fact(n) вычисляет факториал числа n.
  • Базовый случай: Если n равно 0, функция возвращает 1 (факториал 0 равен 1). Это необходимо, чтобы остановить рекурсию.
  • Рекурсивный случай: Если n больше 0, функция возвращает n, умноженное на результат вызова самой себя с аргументом n - 1 (fact(n - 1)).
  • Таким образом, вычисление факториала происходит следующим образом:
    • fact(4) = 4 * fact(3)
    • fact(3) = 3 * fact(2)
    • fact(2) = 2 * fact(1)
    • fact(1) = 1 * fact(0)
    • fact(0) = 1 (базовый случай)
    Подставляя значения обратно, получаем: fact(4) = 4 * 3 * 2 * 1 * 1 = 24

Ожидаемый вывод:

24

Дополнительные замечания:

  • Рекурсивные функции должны всегда иметь базовый случай, чтобы предотвратить бесконечную рекурсию, которая приведет к ошибке RecursionError.
  • Факториал можно также вычислить с помощью итеративного подхода (цикла), что может быть более эффективным с точки зрения использования памяти для больших значений n.
0