Найти - Пользователи
Полная версия: Задача "Разворот последовательности" без применения динамических структур данных
Начало » Центр помощи » Задача "Разворот последовательности" без применения динамических структур данных
1 2 3 4
marvellik
kamikadze
ключевое предложение в этом задании “Рекурсия вам поможет”
 def rev():
    x = int(input())
    if x != 0:
        rev()
    print(x)
rev()
Rodegast
Измельчал народ… На такое простое задание 3 страницы исписали.
 >>> s = range(10)
>>> reduce(lambda x,y: (y,)+x, s, tuple())
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
py.user.next
Rodegast
На такое простое задание
Там же сказано “применить рекурсию” для решения. Чему учит задание? Учит делать рекурсию. Вот её и надо делать.

Rodegast
 reduce(lambda x,y: (y,)+x, s, tuple())
А слово tuple там зачем? Пустой кортеж - это ().
Rodegast
> Там же сказано “применить рекурсию” для решения

Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.

> А слово tuple там зачем? Пустой кортеж - это ().

Ну можешь считать что это я специально написал что-бы тебя потролить.
py.user.next
Rodegast
Там написано “Рекурсия вам поможет.” Это просто подсказка и не более.
Это курс на курсере. Там пытаются чему-то научить, чтобы человек вышел после курса и что-то знал и умел. Задания просто так для разминки или проверки интеллекта не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении. Вот они запретили делать это через списки, чтобы направить его на определённый метод решения. Ну не будет человек сам делать рекурсию, если через списки можно это решить.

А ты ему предлагаешь reduce(). А если нет reduce()? Он что, задание сделать не сможет какое-нибудь в будущем? А если выводить что-то надо? Где у тебя print() в reduce()? Вместо print() ты создаёшь новый массив, что занимает память. И у него там есть один тестик, который подаёт большой массив, а потом следит, чтобы памяти для второго массива такого же размера просто не хватило. Вот я больше чем уверен, что твой код даже там не пройдёт по памяти.

А marvellik вообще считывает рекурсивно.
marvellik
  
def rev():
    x = int(input())
    if x != 0:
        rev()
    print(x)
rev()
А что будет делать marvellik, если массив придёт не из консоли, а по сети, из сокета? marvellik будет менять код функции, которую надо было один раз написать и больше никогда не трогать. А из консоли они придут или по сети - за это должна отвечать вообще отдельная функция, потому что этих массивов из разных мест может быть десяток. Всё никак не дойдёт до него, что код надо разделять по функциям, иначе потом по каждому чиху надо будет всю эту мешанину менять. Хорошо, когда там пять строчек, а будет там сто строчек? Это всё будет только время занимать постоянно.
Rodegast
> Задания просто так для разминки … не дают, а дают так, чтобы человек узнал определённую тему, попрактиковался в определённом направлении.

А с какой целью человек создал эту тему? Я так думаю не для того что-бы ты за него задание решил, а для того что-бы узнать свои ошибки и другие способы решения данной задачи. В таком случае вариант со свёрткой вполне уместен.

> А если нет reduce()?

Вот только передёргивать не надо

> Вот я больше чем уверен, что твой код даже там не пройдёт по памяти.

Рекурсия отъедает больше памяти чем свёртка.
py.user.next
Rodegast
Вот только передёргивать не надо
Рекурсию он может применить в любом языке, тогда как reduce() запросто может не быть там (Visual Basic, Shell). То есть рекурсия - это общее понятие, не привязанное к языку. Если человек её не умеет, то должен будет учиться её делать в любом случае. Поэтому её и дают в таких курсах, хоть она и не должна использоваться в питоне.

Rodegast
А с какой целью человек создал эту тему?
Для него оказалось сложным даже прохождение этого простого курса для новичков. Сам бы он хрен догадался бы, как это задание сделать. Видишь, они там с marvellik'ом даже читают с консоли рекурсивно, потому что не понимают, как эта система на сайте работает. А тесты там не такие информативные и в них не написано, что ввод из консоли не проверяется. Бывают и поинформативнее системы, где каждый тест показывает, что проверяет, и можно догадаться, где код править нужно.

Rodegast
Рекурсия отъедает больше памяти чем свёртка.
Я решал довольно сложные рекурсивные задачи (типа поиска скоплений точек на плоскости). Свёртка там бы не помогла, только запутала бы всё. Ну вот где твой вариант без построения кортежа через reduce(), чтобы там print() сразу срабатывала для каждого числа? Явно ведь такой вариант будет ни к селу ни к городу, reduce() обязательно должна что-то возвращать.
Rodegast
А разве у нас халивар “Рекурсия против свёртки”? Я вот например считаю что каждый программист должен уметь пользоваться обоими инструментами. И что ты к marvellik-у привязался? Его решение вполне соответствует уровню этого задания.
py.user.next
Rodegast
И что ты к marvellik-у привязался?
Я там выше написал, что он вплёл ввод из консоли в саму функцию, чего делать нельзя. Стоит чуть-чуть поменять формат ввода из консоли (подавать числа, например, не на разных строках, а в одной строке), ему придётся писать абсолютно новую функцию, потому что из-за такой мелочи ломается вообще всё. При этом ввод вообще не участвует в задании. Задание заключается в том, чтобы правильно обработать уже введённое.
Rodegast
> Стоит чуть-чуть поменять формат ввода из консоли

В данном случае что-то в консоли 100% не поменяется. Ибо функция эта одноразовая её 1 раз сдадут и забудут.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB