Как исправить цикл чтобы избежать RecursionError?

Есть цикл:

def F(n):
    if n == 1:
        return F(1)
    else:
        if n > 1:
            return F(n-1) + 2**(n-1)

print(F(10))

При вызове функции получаю ошибку: RecursionError: maximum recursion depth exceeded in comparison Как можно изменить цикл, чтобы получить значение и избежать этой ошибки?


Ответы (2 шт):

Автор решения: Эникейщик

Eсли n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то выполнить функцию F c аргументом n=1, в которой если n равно 1, то...

Нужно return F(1) заменить на return 1.

→ Ссылка
Автор решения: Василий Волгин

Ошибка возникает из-за бесконечной рекурсии в F(1), так как вместо возврата числа происходит повторный вызов F(1).

def F(n):
    if n == 1:
        return 1  
    else:
        return F(n - 1) + 2 ** (n - 1)  

print(F(10))  
→ Ссылка