Программа Python для поиска суммы факториалов с использованием рекурсии

Вот программа на Python, которая использует рекурсию для нахождения суммы факториалов заданного числа:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
def sum_factorial(n):
    if n == 0:
        return 1
    else:
        return factorial(n) + sum_factorial(n - 1)
# Test the program
number = 5
result = sum_factorial(number)
print(f"The sum of factorials up to {number} is: {result}")

Эта программа определяет две рекурсивные функции. Функция factorial()вычисляет факториал заданного числа n. Функция sum_factorial()использует функцию factorial()для вычисления факториала каждого числа от nдо 0, а затем суммирует их.

Вот несколько альтернативных методов нахождения суммы факториалов с помощью рекурсии:

Метод 1. Использование вспомогательной функции

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
def sum_factorial(n):
    def helper(n, acc):
        if n == 0:
            return acc
        else:
            return helper(n - 1, acc + factorial(n))

    return helper(n, 0)
# Test the program
number = 5
result = sum_factorial(number)
print(f"The sum of factorials up to {number} is: {result}")

В этом методе мы определяем вспомогательную функцию helper()внутри функции sum_factorial(). Функция helper()принимает дополнительный параметр accдля отслеживания накопленной суммы. Он рекурсивно вычисляет сумму факториалов, добавляя факториал текущего числа к накопленной сумме.

Метод 2. Использование одной рекурсивной функции

def sum_factorial(n):
    if n == 0:
        return 1
    else:
        return sum_factorial(n - 1) + factorial(n)
# Test the program
number = 5
result = sum_factorial(number)
print(f"The sum of factorials up to {number} is: {result}")

В этом методе мы используем одну рекурсивную функцию sum_factorial()для вычисления суммы факториалов. Он рекурсивно вызывает себя с уменьшающимся значением nи добавляет факториал текущего числа к результату рекурсивного вызова.