Почему без строчки elif x>15: return f(x+1,y) программа ломается? (Python 3.9.0) Def g(x):
if x<4:return 0
if x>29:return 0
s=x
d=[]
while s>0:
d+=[s%2]
s=s//2
d.reverse()
d+=[0]
if len(d)==4: return 8*d[0]+4*d[1]+2*d[2]+1*d[3]
elif len(d)==5: return 16*d[0]+8*d[1]+4*d[2]+2*d[3]+1*d[4]
else: return 0
def b(x):
s=x
d=[]
while s>0:
d+=[s%2]
s=s//2
d.reverse()
d+=[1]
if len(d)==4:
return int(8*d[0]+4*d[1]+2*d[2]+1*d[3])
elif len(d)==5:
return int(16*d[0]+8*d[1]+4*d[2]+2*d[3]+1*d[4])
else:
return 0
def f(x,y):
if x==y:
return 1
elif x>y:
return 0
elif x>15:
return f(x+1,y)
else:
return f(x+1,y)+f(g(x),y)+f(b(x),y)
print(f(4,29))

23 Июн 2021 в 19:49
257 +1
0
Ответы
1

Без строчки elif x>15: return f(x+1,y) программа ломается из-за возможности бесконечного рекурсивного вызова функции f(x,y). После того, как x превышает значение 15 и выполняется условие x>15, будет выполнен вызов функции f(x+1,y), который может привести к бесконечному циклу вызова функции f(x,y), так как не установлено условие выхода из рекурсии.

Чтобы избежать этой проблемы, необходимо добавить условие выхода из рекурсии при достижении необходимого условия в функции f(x,y), например, добавив условие elif x>29: return 0 перед elif x>15: return f(x+1,y).

17 Апр 2024 в 15:49
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир