Рекурсия. Сколько существует таких чисел и, что 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.

→ Ссылка