ключевое предложение в этом задании “Рекурсия вам поможет”
def rev(): x = int(input()) if x != 0: rev() print(x) rev()
def rev(): x = int(input()) if x != 0: rev() print(x) rev()
>>> s = range(10) >>> reduce(lambda x,y: (y,)+x, s, tuple()) (9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
RodegastТам же сказано “применить рекурсию” для решения. Чему учит задание? Учит делать рекурсию. Вот её и надо делать.
На такое простое задание
RodegastА слово tuple там зачем? Пустой кортеж - это ().reduce(lambda x,y: (y,)+x, s, tuple())
RodegastЭто курс на курсере. Там пытаются чему-то научить, чтобы человек вышел после курса и что-то знал и умел. Задания просто так для разминки или проверки интеллекта не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении. Вот они запретили делать это через списки, чтобы направить его на определённый метод решения. Ну не будет человек сам делать рекурсию, если через списки можно это решить.
Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.
marvellikА что будет делать marvellik, если массив придёт не из консоли, а по сети, из сокета? marvellik будет менять код функции, которую надо было один раз написать и больше никогда не трогать. А из консоли они придут или по сети - за это должна отвечать вообще отдельная функция, потому что этих массивов из разных мест может быть десяток. Всё никак не дойдёт до него, что код надо разделять по функциям, иначе потом по каждому чиху надо будет всю эту мешанину менять. Хорошо, когда там пять строчек, а будет там сто строчек? Это всё будет только время занимать постоянно.def rev(): x = int(input()) if x != 0: rev() print(x) rev()
RodegastРекурсию он может применить в любом языке, тогда как reduce() запросто может не быть там (Visual Basic, Shell). То есть рекурсия - это общее понятие, не привязанное к языку. Если человек её не умеет, то должен будет учиться её делать в любом случае. Поэтому её и дают в таких курсах, хоть она и не должна использоваться в питоне.
Вот только передёргивать не надо
RodegastДля него оказалось сложным даже прохождение этого простого курса для новичков. Сам бы он хрен догадался бы, как это задание сделать. Видишь, они там с marvellik'ом даже читают с консоли рекурсивно, потому что не понимают, как эта система на сайте работает. А тесты там не такие информативные и в них не написано, что ввод из консоли не проверяется. Бывают и поинформативнее системы, где каждый тест показывает, что проверяет, и можно догадаться, где код править нужно.
А с какой целью человек создал эту тему?
RodegastЯ решал довольно сложные рекурсивные задачи (типа поиска скоплений точек на плоскости). Свёртка там бы не помогла, только запутала бы всё. Ну вот где твой вариант без построения кортежа через reduce(), чтобы там print() сразу срабатывала для каждого числа? Явно ведь такой вариант будет ни к селу ни к городу, reduce() обязательно должна что-то возвращать.
Рекурсия отъедает больше памяти чем свёртка.
RodegastЯ там выше написал, что он вплёл ввод из консоли в саму функцию, чего делать нельзя. Стоит чуть-чуть поменять формат ввода из консоли (подавать числа, например, не на разных строках, а в одной строке), ему придётся писать абсолютно новую функцию, потому что из-за такой мелочи ломается вообще всё. При этом ввод вообще не участвует в задании. Задание заключается в том, чтобы правильно обработать уже введённое.
И что ты к marvellik-у привязался?