Тема 16. Рекурсивные алгоритмы

16.01 Одна функция

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела рекурсивные алгоритмы
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#56375

Алгоритм вычисления значения f(n)  , где n  — целое неотрицательное число, задан следующими соотношениями:

f(n) = 1  , при n = 0  или n = 1

f(n) = f (n − 1)∗n,  при всех остальных n

Найдите, чему равно значение данного выражения: f(2)   f(3)       f(10000)
---- + ----+ ...+ --------
f(1)   f(2)       f (9999)

Показать ответ и решение

Решение руками

Что такое -f-(i)--?
f(i− 1)  Это есть просто число i  . А значит, нужно найти сумму чисел от 2 до 10000 включительно.

Решение программой

В задаче задан рекурсивный алгоритм: функция вызывает саму себя при определённых условиях. Чтобы реализовать алгоритм программой, создадим функцию. Внутри неё задаём правила: f (n) = 1  при n = 0  и 1, иначе f(n) = f(n − 1)∗n  . Далее обязательно запишем @lru_cache(None) перед функцией, чтобы оптимизировать программу (без этого будет превышен лимит рекурсии). В завершении переберём числа от 2 до 10000 включительно, просуммируя отношения -f(i)--
f(i − 1)  .

from functools import lru_cache # импортируем кэширование для того чтобы ускорить выполнение программы за счёт того,
# что программа будет запоминать промежуточные значения функции, а не высчитывать их вновь при подсчитывании значения функции

@lru_cache(None) # применяем кэширование для функции
def f(n): # объявляем функцию
    if n == 0 or n == 1: # если n равно 0 или 1
        return 1 # возвращаем 1
    else: # в ином случае
        return f(n-1) * n
sm = 0 # переменная для подсчёта суммы выражения
for i in range(2,10001):
    sm += f(i)//f(i-1)
print(sm) # вывод ответа

Ответ: 50004999

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!