Maximum recursion depth exceeded in comparison
def F(n):
if n<3:
return n + 1
if n >= 3:
if n%2==0:
return n + 2*F(n+2)
else:
return F(n-2) + n - 2
c = 0
for i in range(1,10000):
s = str(F(i))
if len(s) == 3:
c += 1
print(c)
Вывод программы:
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2F(n+2)
File "main.py", line 6, in F
return n + 2*F(n+2)
File "main.py", line 2, in F
if n<3:
RuntimeError: maximum recursion depth exceeded in comparison
Ответы (2 шт):
Причина указана прямо в тексте ошибок.
Узнать заданное ограничение на глубину рекурсии можно так:
import sys
print(sys.getrecursionlimit())
Установить нужную вам - вот так:
sys.setrecursionlimit(lim_of_recr)
Но советую быть с этим параметром поосторожнее. Поэтому лучше править алгоритм, а не давать возможность углубляться в рекурсию.
Второе условие вызывает себя же в будущем. Поэтому если оно четно, то оно вызовет еще одну четную функцию, а она еще одну, т.е. так и не посчитает значение никогда. Решается, дописав 10 строку:
def F(n):
if n<3:
return n + 1
if n >= 3 and n%2==0:
return n + 2*F(n+2)
if n >= 3 and n%2!=0:
return F(n-2) + n - 2
c = 0
for i in range (1,100):
if i%2!=0:
s = str(F(i))
if len(s) == 3:
c += 1
print(c)