Может кто-то объяснить почему именно так?

Рейтинг: -1Ответов: 1Опубликовано: 15.05.2023
def f(x, y):
    global k
    if x > y:
        return False
    if x == y:
        return True
    else:
        return f(x + 1, y) + f(x + 5, y) + f(x * 3, y)


for y in range(2, 100):
    if f(1, y) == 175:
        print(y)

Картинка задания Почему в данном случае 175 - это количество программ? Это же просто цикл, который подставляет значения к функции? Короче, почему 175 в данном коде - это количество программ?

Ответы

▲ 3Принят

Функцию f возвращает количество способов получить y из x. Для этого она рассматривает три случая.

  • x > y
    Любые три доступных действия увеличивают x, поэтому функция возвращает False (тоже самое что и ноль)
  • x == y
    По той же причине это единственный способ, поэтому возвращаем True (1)
  • x < y
    Это пара нам не подходит, поэтому рассматриваем три другие (x+1, x+5, 3*x). Они также рассматривают другие случаи пока не дойдут до первых двух условий.

В итоге результат функции, это количество путей до y. Затем в цикле поставляются различные y, ищя те значение при которых функция вернёт 175.