Как избавиться от RecursionError: maximum recursion depth exceeded
решаю задачу: Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями:
F(n) = n, при n ≤ 5,
F(n) = n + F(n/5 + 1), когда n > 5 и делится на 5,
F(n) = n + F(n + 6) , когда n > 5 и не делится на 5.
Назовите минимальное значение n, для которого `F(n) > 1000.`
Постоянно выдает RecursionError: maximum recursion depth exceeded
Как решить подобное?
Заранее спасибо
Мой код перебирает все в цикле значения n и вылетает с ошибкой
def f(n):
if n <= 5:
return n
if n > 5 and n % 5 == 0:
return n + f(n/5 + 1)
if n > 5 and n % 5 != 0:
return n + f(n + 6)
for n in range(1, 1000):
if f(n) > 1000:
print(n)
break
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
При n = 6 алгоритм зацикливается. Вы полностью привели условие задачи?
function f(n) {
count++;
console.log("n =", n, "step =", count);
if (count > 20)
return 0;
if (n <= 5)
return n;
if (n > 5 && n % 5 == 0)
return n + f(n / 5 + 1);
if (n > 5 && n % 5 != 0)
return n + f(n + 6);
}
var count = 0;
console.log(f(6));
Автор решения: johny
→ Ссылка
Надо было просто написать исключение для ошибки RecursionError
def f(n):
if n <= 5:
return n
if n > 5 and n % 5 == 0:
return n + f(n/5 + 1)
if n > 5 and n % 5 != 0:
return n + f(n + 6)
for n in range(1, 1000):
try:
if f(n) > 1000:
print(n)
break
except RecursionError:
print("fail")
всем спасибо за ответы!