C. Многочлен N-ой степени

Напишите функцию make_equation, которая по заданным коэффициентам строит строку, описывающую валидное с точки зрения Python выражение без использования оператора возведения в степень.

Многочлен второй степени с коэффициентами ab и c, например, можно записать в виде:
((a)∗x+b)∗x+c

Примечание

Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций, за исключением рекурсивных.
Трассировка вызова рекурсивной функции в обработке ответа не учитывается и показана для примера.

Пример

Ввод

result = make_equation(3, 2, 1)

Вывод

# Вызов make_equation(3, 2, 1)
# Вызов make_equation(3, 2)
# Вызов make_equation(3)
result = '((3) * x + 2) * x + 1'

Ввод

result = make_equation(3, 1, 5, 3)

Вывод

# Вызов make_equation(3, 1, 5, 3)
# Вызов make_equation(3, 1, 5)
# Вызов make_equation(3, 1)
# Вызов make_equation(3)
result = '(((3) * x + 1) * x + 5) * x + 3'

Решение

Если вы не на “ты” с рекурсией, советую прочитать сначала статью Рекурсия. Погружаемся и всплываем. Там изложены теоретические основы, которые обосновывают выбор метода решения этой задачи и немного структурируют знания о подходах проектирования рекурсивных задач.

Итак нам даны числа, мы должны заворачивать их в скобочки и приписывать к ним * x + если это не последнее число в последовательности.

Очевидным граничным условияем для нас является исчерпание списка чисел. То есть если у нас есть список только из одного элемента, то мы возвращаем число, в противном случае изымаем последний элемент списка и делаем рекурсивный вызов функции, завернутый в скобочки, к которому приписываем умножение на x, и прибавляем текущее последнее значение списка.

Для тех, что прочитал статью будет очевидно, что это метод “всплытия”, когда мы используем полученные данные только тогда, когда выходим из рекурсии.

Посмотреть код

Решение

Python
def make_equation(*num):
    if len(num) == 1:
        return f'{num[0]}'
    else:
        return f'({make_equation(*num[:-1])}) * x + {num[-1]}'

Решение

Подписаться
Уведомить о
guest
6 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
nmalkam
02.01.2024 11:52

я понял благодаря вашему объяснению: “Рекурсия. Погружаемся и всплываем” принцип решения задачи
ещё один сложный момент правильно подать данные в программу, то есть вместо

return f"({make_equation(nums[:-1])}) * x + {nums[-1]}"

нужно использовать

return f"({make_equation(*nums[:-1])}) * x + {nums[-1]}"

важно поставить звёздочку

make_equation(*nums

в обоих случаях class ‘tuple’, но длинна разная
не до конца понимаю принцип

надо вернуться назад, это уже объясняли)))

nmalkam
Ответить на  Сергей Клочко
03.01.2024 12:26

вот вроде понятно, но до автоматизма ещё не дошло
напишите, пожалуйста!
Вы для меня мир открыли, когда в первый раз написали о распаковке
Я могу задать вопросы, возможно для вас это явные и простые вещи, но для меня нет
Очень буду ждать статью))

nmalkam
Ответить на  Сергей Клочко
03.01.2024 12:32

Скажите, пожлаййста, как правильно определить тип данных??
для меня очень не явно в данных задачах правильно определить это

IDE пишет что num = {tuple: 4} (3, 1, 5, 3)

nmalkam
Ответить на  Сергей Клочко
22.01.2024 07:52

сохранил как шпаргалку)))