Найдите ошибку в программе??????: - Компьютерные вопросы

Вопрос Найдите ошибку в программе??????:

Регистрация
23 Сен 2013
Сообщения
99
Репутация
0
Спасибо
0
Монет
0
def F(n):

if n<=1:

return 1

if n>1 and n%2==0:

return (n/2)*F(n-1)

else:

return((n-1)/2)*F(n-1)

print((F(2024)-F(2022))/(F(2021))

Вроде все правильно, но выдает ошибку в последней строке
 
Регистрация
29 Авг 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
def F(n):
if n<=1:
return 1
if n>1 and n%2==0:
return (n/2)*F(n-1)
else:
return((n-1)/2)*F(n-1)
print((F(2024)-F(2022))/(F(2021)))
 
Регистрация
3 Июн 2013
Сообщения
86
Репутация
1
Спасибо
0
Монет
0
Попробуй так:
def F(n):
if n <= 1:
return 1
if n > 1 and n % 2 == 0:
return (n // 2) * F(n - 1)
else:
return ((n - 1) // 2) * F(n - 1)

result = (F(2024) - F(2022)) / F(2021)
print(result)
 
Регистрация
23 Ноя 2013
Сообщения
87
Репутация
-3
Спасибо
0
Монет
0
F(2022) = F(2021) * 2022 / 2 = F(2021) * 1011
F(2023) = F(2022) * (2023 - 1) / 2 = F(2021) * 1011 * 1011
F(2024) = F(2023) * 2024 / 2 = F(2021) * 1011 * 1011 * 1012

(F(2024) - F(2022)) / F(2021) =
= (F(2021) * 1011 * 1011 * 1012 - F(2021) * 1011) / F(2021) =
= 1011 * 1011 * 1012 - 1011 =
= 1011 * (1011 * 1011 - 1) БЕЗ циклов и рекурсий. print(1011 * (1011 * 1011 - 1)) Проблема твоего кода в том, что ты используешь вещественное деление, но значения F(2xxx) многократно превосходят допустимый диапазон вещественных чисел. И ты вместо реальных чисел получаешь Inf (бесконечность). Кроме того, бессмысленно использовать рекурсию: намного эффективнее динамическим программированием последовательно вычислить значения от F(2) до F(2024). f = [1, 1]
for n in range(2, 2025): f.append(f[-1] * (n // 2))
print((f[2024] - f[2022]) // f[2021])
 
Регистрация
14 Июн 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
def F(n):
if n <= 1:
return 1
if n > 1 and n % 2 == 0:
return (n / 2) * F(n - 1)
else:
return ((n - 1) / 2) * F(n - 1)

print((F(2024) - F(2022)) / F(2021))
 
Сверху Снизу