09.02.2017, 20:04 | #1 |
Участник
|
Помню дали задачку, вывести ряд Фибоначи. Нарисовал рекурсию. Не понравилось. Видать не поняли.
|
|
09.02.2017, 20:58 | #2 |
Участник
|
А по моему логично....в ТЗ именно так сказано - "каждое последующее число равно сумме двух предыдущих чисел"....и почему не рекурсия А про глубину стека пусть постановщик ТЗ думает.....
__________________
любитель портвейна и снов с прокисшей капустой в усах |
|
|
За это сообщение автора поблагодарили: Silence (1). |
09.02.2017, 21:06 | #3 |
Участник
|
Цитата:
Кеширование конечно хорошо, но бесполезно. Ибо ряд бесконечен и программа все равно упадет из-за переполнения. Или Вы предлагаете после достижения результата в N-1 знаков, где N = кол-во не влезающее в память, разбивать результат на части и обсчитывать их отдельно, после чего выводить потоком на экран? (Точнее на бумажку, так как предлагалось писать код на листе А4) А потом так же поступать и с отдельными частями результата ибо и они переполнятся. А это рекурсия. Цитата:
Единственный логичный выход, по моему, это сделать так же. Удалиться. ) Видится мне код из трех строчек включая декларативную часть с тремя десятками комментариев...
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) Последний раз редактировалось Silence; 09.02.2017 в 21:43. |
|
09.02.2017, 23:16 | #4 |
Участник
|
)))))
Цитата:
Спасибо за разъяснения. Свое мнение не изменил. |
|
09.02.2017, 23:35 | #5 |
Участник
|
Т.е. Вы считаете, что для бесконечного цикла нужно писать нечто вроде:
X++: while (true) Или Вы думаете, нужно было объяснить, что задача поставлена не верно? Сомневаюсь, что ждали именно этого. ЗЫ. Наверное это не то место для таких дискуссий
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
10.02.2017, 00:14 | #6 |
Участник
|
Прочитал, что такое "Фибоначчи" в википедии и написал такой джоб. В аксапте не проверял
Прерывается через CTRL + BREAK/ Без рекурсии. X++: x = 0; y = 1; info(int2str(x)); info(int2str(y)); while (true) { info(int2str(x + y)); [x, y] = [y, x + y]; } |
|
10.02.2017, 00:50 | #7 |
Участник
|
Я знаю, что эта задача является классической.
Разбирается во всевозможных статьях. Начиная от школьных обучающих курсов до многотомника Кнута. Сходу можно привести 4-5 решений. Где-то видал статью с 15 способами. Один из них, где время расчета меньше O(n). рекурсию привести конечно можно. но оговорив область применимости, влияние повторных расчетов на производительность и прочие недостатки. while(true)... му-ха-ха-ха!!!! хороший панк-юмор да, это один из способов решения. в памяти хранятся только два последних значения, повторных вычислений нет, время выполнения линейное. момент, который не оговорен - целочисленные значения. для такого случая было бы хорошо оговорить область применимости ))) в обычных системах, скорее всего, выполнение прервется по переполнению раньше, чем пользователь нажмет CTRL + BREAK/ в аксапте приведенный алгоритм, скорее всего, будет просто выдавать неправильные (отрицательные) значения начиная с некоторого числа, причем достаточно близкого к началу последовательности. если программист не оговорил хотя бы в комментарии область применимости... и не предупредил, что она будет настолько маленькой... с точки зрения аксапты, я бы обратил внимание, что автор использует int2str вместо strfmt. Это была бы тема для дополнительных вопросов. свое мнение не изменил - мне бы тоже не понравилось. Последний раз редактировалось mazzy; 10.02.2017 в 01:05. |
|
10.02.2017, 12:06 | #8 |
Участник
|
Так это задача программиста выбрать подходящий способ решения. Рассмотреть несколько возможных вариантов решений, оценить их плюсы и минусы и задать уточняющие вопросы. Постановщик может не знать об ограничениях, или умышленно умолчать, чтобы посмотреть, как человек будет выкручиваться при недостатке информации и нечетких требованиях.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.02.2017, 12:56 | #9 |
Участник
|
Задача была вывести ряд Фибоначчи. Человек справился. Но я бы тоже на их месте подумал, стоит ли брать к себе человека, решающего задачи путем рекурсии.
"Шурик, вы комсомолец? Это же не наш метод!" ©
__________________
// no comments |
|
10.02.2017, 13:05 | #10 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Diman (1). |
10.02.2017, 14:07 | #11 |
Участник
|
Замечу, что решение с помощью рекурсии является точной имплементацией определения чисел Фибоначчи.
На одном собеседовании я показывал ещё два способа, с помощью которых можно решить эту задачу, хотя начал с рекурсии. В идеале, конечно, лучше писать быстро, чисто, выразительно, с оптимальной сложностью, с видением всех подводных камней, но, я считаю, что в первом приближении задачу лучше решить хорошо, а потом уже заниматься оптимизацией. |
|
|
За это сообщение автора поблагодарили: ta_and (3). |
10.02.2017, 14:17 | #12 |
Участник
|
Цитата:
числа фибоначчи определяются через золотое сечение. именно этим они и интересны. рекуррентная последовательность - это следствие из определения. кстати, именно возврат к исходному определению через золотое сечение и позволяет перейти от суммирования последовательности к умножению матриц достигнуть производительности < O(n) https://ru.wikipedia.org/wiki/%D0%A7...87%D1%87%D0%B8 Последний раз редактировалось mazzy; 10.02.2017 в 14:24. |
|
10.02.2017, 14:21 | #13 |
Участник
|
|
|
10.02.2017, 15:28 | #14 |
Участник
|
Цитата:
Я, честно, стал опасаться кудесников, которые могут решить подобные задачи, но не знают основных паттернов в Dax - FormLetter'a там или ничего не слышали А еще лучше - по бизнесу задать вопросы. Тогда понятно, кто это - кодер (поставь задачу - я решу, если хорошо разжевать) или Программист (сначала пойму задачу, изучу настройки, часть так / часть из кода, пойму что от меня хотят, как это работает в другом модуле, попробую переубедить или поискать другой воркэраунд или запрограммировать малой кровью). Как можно заметить, второй - это Программист, которому лень быть консультантом. Т.е. мы получаем 2-в-1. Даже 3 в 1, т.к. отсутствует процесс коммуникации и тестирование легче. Подобные люди стоят хоть и подороже, но в разы эффективнее. |
|
10.02.2017, 15:40 | #15 |
Участник
|
Поэтому самый лучший способ заполучить нужную работу - запросить меньше денег, чем объявил работодатель.
Потому что все равно ты не догадаешься, что у работодателя в голове сидит золотое сечение Последний раз редактировалось Ace of Database; 10.02.2017 в 15:43. |
|
|
За это сообщение автора поблагодарили: AlexSD (3). |
10.02.2017, 15:42 | #16 |
Участник
|
Цитата:
а почему вы считаете, что спрашивают подобные задачи и не спрашивают паттерны? |
|
10.02.2017, 15:49 | #17 |
Участник
|
Цитата:
Панкуете, ребяты... Это все равно как не знать героев мультфильма Ну, погоди. Или Тома и Джерри. Конечно, возможно, что не знают. Ничего плохого в этом нет. Просто, если человек не знает как связан ряд Фибоначчи и золотое сечение... Это характеристика кандидата. Прочь грусть, прочь уныние, прочь тоску... )))) |
|
10.02.2017, 15:53 | #18 |
Участник
|
Это свободная страна - пусть спрашивают что хотят, хоть дату смерти Пушкина (сегодня 180 лет, кстати, с этой печальной даты).
Если хотят взять светлую голову - стажера, то данная задача - прекрасный вариант. Как и вопрос "сколько заправок в Челябинске". Есть ищут человека со знанием системы, я бы задавал несколько иные вопросы, исходя из собственного опыта. |
|
10.02.2017, 15:56 | #19 |
Участник
|
Я не думаю, что тот же EVGL знал что это такое, когда в Клумбе начинал программировать. И я не думаю, что это характеризует его как плохого разработчика или консультанта.
|
|
10.02.2017, 15:58 | #20 |
Участник
|
Прекрасный пример ИЛИ-ИЛИ логики. ))))
Кстати, тоже отличный маркер и характеристика кандидата. На самом деле, в свободной стране никто не запрещает спросить И эту задачи, И задать иные вопросы. |
|