Рекурсия. Сколько существует таких чисел и, что 1 < и < 500 и А(и) = 8?
def F(n):
if n == 0:
return F(0)
if n > 0 and n % 2:
return F(n/2)
if n % 2 != 0:
return 1+F(n-1)
count = 0
for i in range(-1000,1000):
if (F(i) >= 1) and (F(i) <= 500) and (F(i) == 8):
print(F(i))
Не очень понимаю, почему этот код не работает для этого задания
Ответы (3 шт):
Автор решения: Sergey Tatarincev
→ Ссылка
а почему соственно
for i in range(-1000,1000):
если
for i in range(0,501):
и самое главное. Зачем проверять 1<=F(i)<=500? Вместо
if (F(i) >= 1) and (F(i) <= 500) and (F(i) == 8):
должно быть
if F(i) == 8:
И напоследок к рекурсии
def F(n):
if n == 0:
return 0 # В вашем варианте return F(0) - бесконечная рекурсия
if n % 2 == 0: # зачем проверять отрицательные числа?
return F(n/2)
if n % 2 != 0:
return 1+F(n-1)
Автор решения: Михаил Алексеевич
→ Ссылка
Вы не верно написали условия.
def F(n):
if n == 0:
return 0
elif n > 0 and not (n % 2):
return F(n/2)
elif n % 2 :
return 1+F(n-1)
else:
raise ValueError(f'Не предусмотренное условиями задачи n = {n}')
Автор решения: Эникейщик
→ Ссылка
Кроме неправильного условия для четности, вот эта часть
def F(n):
if n == 0:
return F(0)
никогда не закончится. Вернее, закончится ошибкой превышения глубины рекурсии, потому что все время будет вызываться F(0). Замените return F(0) на return 0.
