pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Каким способом лучше всего менять html код?

Лучший ответ: Если макет не слишком сложный, то можно обойтись и медиа запросами.

Например вот так:

snippet

Плюс минус немного JS для смены класса и прочее, но в основном всю работу выполняет CSS.

Худший ответ: на пхп проверяй устройства и подгружай нужный тебе файл
Вопрос: Как подобрать лицензию на сервер ОС Windows Server 2019/2022?

Лучший ответ: Попросить подобрать лицензию у тех, у кого будете покупать.

Худший ответ: Бери на ОС Windows Server 2019
Вопрос: Можно ли создать навороченный сайт на webflow?

Лучший ответ: делать абсолютно любой дизайн
Абсолютно любой дизайн не даст сделать не один конструктор, только ручками

Худший ответ: Правда ли это? 
Правда

Получается критерии:
верстать на vw, 
Верстают руками, а на конструкторах собирают

Комюнити, подскажите стоит ли игра свеч?
Стоит, но ты не сможешь реализовать весь список что сам же написал, без кода.
Его все равно придется вставлять руками (платная подписка).

можно ли построить такие же сайты как здесь? https://paradigma.website/portfolio/
Можно и даже лучше. Webflow сделан разрабами для разрабов (или хотя бы дизайнеров). А не для дилетантов как у тильды.
Имея навыки в верстке ты соберешь на нем все что угодно, так еще и экспортировать сможешь.
С нормальным колоночным кодом. Единственный минус - при экспорте сайта не экспортируются php обработчики форм, т.к теперь они работают через их срм. Придется писать вручную. (раньше было можно, но то раньше)

Webflow подходит для людей, которые понимают что тильда это лютое говно, не хотят верстать с нуля, но хотят относительно хороший машинный код.

Да, в этом случае это оочень хороший вариант.

Работая с Webflow придет визуальное понимание что такое верстка и как вообще работают сайты/блоки/отступы/абсолюты/брейкпоинты и тд.

Но это точно не подойдет для каких-то серьезных проектов.
Это для сайтов-визиток, промо-сайтов, лендов, и максимум простых интернет-магазинов.

не пугайтесь вы так html/css/js, нет там ничего страшного и сложного. потратите неделю времени чтобы разобраться, зато потом будете с развязанными руками
Mico Sanoa вот это очень хороший ответ.
Я вообще зашел в верстку после фигмы через вебфлоу.

В фигме - блоки. Попытался сделать свой дизайн в тильде - получилось говно.
Попробовал на вебфлоу - оказалось что это те же блоки. Сначала тупил, но потом дошло.
На вебфлоу тот же css , просто визуально отображен.

И если в коде тебе пришлось бы писать руками, например padding-top: 50px; ,
то в вебфлоу ты бы это делал в визуальном интерфейсе. Но это все тот же css

Мое мнение и мнение нормальных фронтов:
Тильда придумана либо для людей которые в этом полный ноль, либо для недодизайнеров. Именно недо. Которые окончили всратые курсы за 2 недели и теперь они сайтостроители. Верстать не умеют, а денег хотят. Вот и раздули. А для заказчиков это "удобная админка". Хотя если на тильде сделать реально достойный проект, там придется столько кода прописать и таких зависимостей навешать, что это уже перестает быть "удобной админкой".

Как бы они эту тильду не украшали, как бы не добавляли коды и тд. По итогу это все равно медленный и засранный кусок хрени.

Мой самый первый сайт на веблоу (там в конце табы, это я тестил. Так и надо). Открой и проверь как адаптируется быстро. А теперь открой любой сайт на тильде и попробуй сузить экран..)

Помог? Отмечай решением
Вопрос: Для чего нужен «Микс» в методологии БЭМ?

Лучший ответ: Если с Модификатором еще + - понятно [...], то вот с Миксом мне не понятно,
Вы невнимательно читали про БЭМ или вовсе не читали.
Написание модификатора на html-элементе – это тоже микс.

Mix - англ. Смесь

Именно для этого они и нужны: Для размещения (смешивания) нескольких БЭМ-сущностей на одном HTML-элементе.

Худший ответ: Нужны для удобства.

Я бы рекомендовал использовать, когда необходимо реализовать layout’ы каких-либо переиспользуемых компонентов.

Кнопка может быть светлой и темной, для этого логично использовать модификатор, так как модификация несущественная и, очевидно, отражающая состояние блока (…_dark / …_light). 
Если модификация более существенная и требует сбора стилей из разных классов, можно использовать микс, тогда система получится более гибкая, за счёт мелких переиспользуемых классов.

В процессе решения проблем становится понятно, где и что удобнее использовать.
Вопрос: Задача на циклы в JavaScript?

Лучший ответ: Улучшать такой примитивный код да еще в отрыве от задачи - бесполезное занятие.  Тем более на таком начальном уровне знаний. 
Поняли как работают циклы? Сможете применить на практике? Все, следующая задача.

А то можно щас начать про потребление памяти при сложении строк, про var/let... Суть то задания не в этом

Худший ответ: Задачка действительно простая, но я бы попытался оптимизировать память с прицелом на "sliced strings" - просто как иллюстрация, потому что объемы крошечные.

const full = '#'.repeat(7); // полная строка
for (let i = 1; i <= 7; i++){
    console.log(full.substr(0, i));
}

Если верить некоторым статьям по v8, full.substr(0, i) внутри себя использует тот же строковый буфур, что и full, а не создает новый. Конкатенация тоже переиспользует, но через менее эффективную по памяти структуру. Честно говоря, замеры не проводил )
Вопрос: Объясните, Как работает WSGI?

Лучший ответ: https://www.youtube.com/watch?v=LEbVn0cJQLg&list=L...

крайней толковый доклад про WSGI и ASGI. про WSGI буквально первые 5 минут, но вполне подробно на примере объясняется

Худший ответ: Да. Создаётся один раз, между запросами сохраняется.
Вопрос: Почему IntellijIDEA не видит зависимость от Maven?

Лучший ответ: Решилось так:
1) Нажимаем Shift + Ctrl + Alt + S, переходим на Libraries и удаляем все библиотеки.
2) Справа окна IntellijIDEA  нажимаем вкладку `Maven` и выбираем это:
Жми, чтобы посмотреть скриншот


3) Наслаждаемся :)

Худший ответ: Доброго времени суток, у меня была подобная проблема, и решил я ее как советуют выше.
Удалил все Библиотеки а затем зашел в pom.xml и нажал на обновить.
Вопрос: Как избавиться от кучи if в методе?

Лучший ответ: Похоже на chain of responsibility. 
Смысл в том чтобы создавать обработчики заказа, которые будут передавать его друг-другу по цепочке пока в каком-то из них он не будет обработан.

Худший ответ: Может хотел от вас услышать, что по таблице можно искать бинарным поиском.
Вопрос: Как реализовать отправку данных с сайта в программу?

Лучший ответ: Вариант 1: Почитайте о WebSocket’ах:
https://developer.mozilla.org/ru/docs/Web/API/WebS...

Вариант 2: HTTP запросы из программы на сервер с определенным промежутком времени.

В чатах, проблема извещения участников о новых сообщениях имеет ту же суть, что и Ваша задача. Для уведомления подключенных участников о том, что поступило новое сообщение используется технология WebSocket’ов.

Худший ответ: Используйте WebSocket или со стороны программы, допустим, каждую секунду опрашивайте сервер на наличие необходимых файлов, если есть - то в ответ отдавать файл.
Вопрос: Как развиваться если ты один?

Лучший ответ: мой уровень - middle
я буду единственным фронтом на проекте
писать предстоит с нуля
Ой не завидую я тому, кто будет это проект поддерживать через несколько месяцев...

Когда Вы один, нет возможности ни посмотреть как схожие задачи решают другие, ни понять, что сам делаешь что-то не то, и это на любом уровне так. Возможно сможете проанализировать свои ошибки постфактум, когда проект загнется, а он обязательно загнется, ибо бизнес на нем экономит не успев начать...
Заплатят тоже вряд ли нормально, так что смысла идти на такой проект не вижу совсем.
А сможете ли Вы при этом вырасти - зависит только от Вас. Senior - это больше про ответственность, про проектирование и про глобальное видение проекта целиком.  Это сильно отличается от простого делания тасок самостоятельно (middle) или с помощью коллег (junior).
Что бы писать проект с нуля, его придется проектировать, так или иначе, а это задача senior, если справитись - опыт будет очень полезным. Но скорее всего наделаете ошибок, это нормально для Вас, но плохо для бизнеса, хотя такой бизнес получит именно то, что должен получить нанимая мидла на решение сеньорских проблем...

Худший ответ: проще всего учиться когда есть учитель, который еще и фидбек сразу дает и обсудить все можно. Это намного быстрее, чем самому грабли собирать, которые уже собрали. 
За пять лет только мидл? ну это средне плоховато, если в команде такой рост, то что будет когда будешь один? настраивать деплой, первоначальную настройку проекта научишься конечно, а дальше что? и там даже не планируют донанимать людей?
Вопрос: Как подключить принтер из другой подсети?

Лучший ответ: Используйте только LAN-порты на Keenetic и отключите DHCP на Keenetic. Т.е. кабель из Mikrotik'а подключайте в LAN-порт на Keenetic.

Худший ответ: перевести кинетик в режим ретранслятора
Вопрос: Как сделать логические вентили на кт315?

Лучший ответ: А в чем проблема? Гуглите "ключевой режим транзистора" и рассчитываете параметры.
Вот ссылка к примеру
Единственно я бы еще кривую допустимой рассеиваемой мощности на ВАХ добавил

Кроме того, не подскажите ли, какие диоды лучше всего подойдут?
Те, у которых скорость переключения побольше - сигнальные диоды, либо шоттки к примеру...
А вообще  - нужно подробнее ТЗ формулировать... - скорость переключения, токи, сложность и надежность - все это на подбор будет параметров сильно влиять...

Худший ответ: Ответ на вопрос из заголовка - на этой картинке:

Далее необходимый комментарий.  Логических функций существует бесконечное множество, и все они могут быть осуществлены с использованием только элементов И-НЕ или ИЛИ-НЕ (кажется, это называется функциональной полнотой). Чтобы сделать такой логический элемент, вам достаточно двух КТ315. Чтобы сделать из ИЛИ-НЕ элемент ИЛИ, придётся добавить третий КТ315 (элемент НЕ). Чтобы увеличить количество входов, надо просто запараллелить транзистров больше, чем два.
И т.д.
В стародавние 50-е годы именно этим способом строились первые транзисторные ЭВМ. Триггеры, регистры, сумматоры, память - всё было сделано на транзисторах по принципу примерно такому же, как на вышеприведённой картинке. Но конечно, не на КТ315 (они появились позже).
Вопрос: У всех Сафари крашится на самоподписанных сертификатах?

Лучший ответ: Отвечу на свой вопрос. Это из-за Bitwarden оно крашится. Выяснил просто экспериментами.
Баг-репорт уже отправил

Худший ответ: safari 14.0.3 (14610.4.3.1.7)
macos 10.14.6 (18G9018)

никаких проблем с сертами.
Вопрос: Ошибка при компиляции платы ардуино что делать?

Лучший ответ: Вот тут:
pinMode(10. OUTPUT);
Перепутатны точка и запятая. Нужно везде исправить.

Худший ответ: void digitalWrite(uint8_t, uint8_t); - не уверен что такая конструкция допустима. 
Я бы как то по другому это решил менее прямолиненйно.
Вопрос: Как подключить солнечную батарею к домашней сети?

Лучший ответ: через GRID TIE инвертор подключить можно

Худший ответ: Судя по описанию вместе с панелью уже идет инвертор на 1500ват 220вольт, но так как не сказано какой он там, лучше спросить об этом продавца
Так же тебе понадобится аккумуляторная батарея (в нормальном инверторе они идут внутри но на картинках нарисовано что батарея тут внешняя)

p.s. инвертор имеет кпд порядка 80%, так же аккумулятор имеет саморазряд, контроллер солнечной батареи тоже кушает, помни об этом, когда захочешь подключить к этому инвертору хотя бы ноутбук.

На 220 выходить надо когда у тебя мощности в среднем у батарей будут от полукиловата, а так лучше старайся все от 12/24в питать, благо автомобильные блоки питания есть наверное для всего (а на 50ватт у тебя наверняка 1-2 потребителя плюс смартфоны)
Вопрос: Как перемешать между собой слова фразы?

Лучший ответ: import random

sentence = 'Если плоскость проходит через данную прямую, параллельную другой плоскости, и пересекает эту плоскость, то прямая пересечения плоскостей параллельна данной прямой'

chunk_size = 3
words = sentence.split()

chunked_words = []

for i in range(0, len(words), chunk_size):
    chunked_words.append(words[i:i + chunk_size])

random.shuffle(chunked_words)

new_sentence = ''

for chunk in chunked_words:
    new_sentence += ' '.join(chunk) + ' '

print(new_sentence)

Худший ответ: letter = 'Если плоскость проходит через данную прямую, параллельную другой плоскости, и пересекает эту плоскость, то прямая пересечения плоскостей параллельна данной прямой'

def chunk(st, lns):
	import random
	mv = st.split()
	mv = [' '.join(mv[x:x+lns]) for x in range(0, len(mv), lns)]
	return ' '.join(random.sample(mv, len(mv)))
	
print(chunk(letter, 3))
Вопрос: Как еще можно реализовать «внутреннее API» в веб-приложении, кроме как через ООП или HTTP?

Лучший ответ: Да, собственно, как угодно. Через очереди сообщений, сокеты Unix, вебсокеты, самописный протокол...

Худший ответ: Rsa97 спасибо, верно

Добавлю, для пункта 2 мне существенно упростило это:
https://qna.habr.com/q/655113#answer_1431141
Вопрос: Как правильно сгруппировать и сделать сортировку массива объектов по определённому ключу?

Лучший ответ: const sorted = Array
  .from(arr
    .reduce((acc, n) => (
      acc.has(n.key) || acc.set(n.key, []),
      acc.get(n.key).push(n),
      acc), new Map)
    .values(), n => n.sort((a, b) => a.id - b.id))
  .flat();
или

const minKeyIndex = arr.reduceRight((acc, n, i) => (acc[n.key] = i, acc), {});

const sorted = [...arr].sort((a, b) => ((minKeyIndex[a.key] - minKeyIndex[b.key]) || (a.id - b.id)));

Худший ответ: Пройти по массиву, складывая встреченные новые ключи в массив уникальных ключей в порядке их встречи.
Индекс ключа в этом массиве и id элемента становятся ключами для сортировки.
Отсортировать (но не взбалтывать!) и удалить добавленный сортировочный ключ.

const dict = [];
arrObj.forEach((el, i) => {
  if (! dict.includes(el.key)) dict.push(el.key);
  el.sorter = dict.indexOf(el.key);
});
arrObj.sort((a, b) => a.sorter < b.sorter ? -1 : (a.sorter > b.sorter ? 1 : a.id - b.id));
arrObj.forEach((el) => delete el.sorter);

console.log(arrObj);
Вопрос: Хранение множества мелких и средних файлов, как оптимально: файловая система или база данных?

Лучший ответ: Хранить готовые файлы на сервере хочу из-за скорости. Мне кажется, что гораздо быстрее повторно скачать уже сформированный файл который хранится на сервере, чем каждый раз при скачивании файла 1. отправлять запрос к базе данных с фильтрами 2. на основе отфильтрованных данных сформировать CSV файл(ы) 3. заархивировать файл(ы) и 4. затем скачать. Или я неправильно думаю?

правильно думаешь
но - случаи когда "хранить не в ФС" - есть, банальные - доступ с разных серверов, там уже иногда проще запросить файл одним запросом, чем вначале запросить базу, а потом файл по микросервису или NFS, однако - и в этом случае их не хранят чисто в БД, а хранят в object store, Amazon S3 и все такое (Есть и локальное) - obj store, конечно, похоже на FS но не совсем FS   - этакая смесь алгоритмов рейда, БД и микросервиса

это я все написал к тому, что файлы ВСЕГДА хранят в FS, быстрее и наименее нагруженного решения нет,
КРОМЕ - случаев см. выше

Худший ответ: Я бы выступил за использование файловой системы. При использовании базы данных надо продумывать как и куда делать бэкапы, т.к. если полетит файл бд, то его придется откуда-то восстанавливать.
Вопрос: Функция UPDATE в PostgreSQL не принимает вложенный запрос?

Лучший ответ: А чего спрашивать-то? Прочитайте документацию postgresql про update - есть там подобный синтаксис или нет? Уже понятно, что нет. Возможно, Вам подойдёт with?
А что касается Степиков и подобных, то в курсах по SQL обязательно должна быть указана версия/стандарт sql на которых курс основан, чтобы подобные казусы выявлять.

Худший ответ: Это скорее всего неправильно.
SELECT  name, number_plate, violation
FROM fine
GROUP BY name, number_plate, violation
HAVING count(*) > 1
если используется GROUP BY то в выражении SELECT должна стоять функция агрегации (count в данном случае)
Вопрос: Какие импорты нужны, чтобы работал random?

Лучший ответ: наверно import random? ти плохо знаешь основы языка внучёк

Худший ответ: Соответствующие.
Вопрос: Насколько будет анонимным kali linux установленный рядом с Windows на одном диске?

Лучший ответ: А как kali вообще гарантирует анонимность, расскажите?

Худший ответ: Самый лучший дистрибутив для анонимности ЛИЧНО НА МОЙ ВЗГЛЯД это конечно же Whonix . Устанавливается на VirtualBox, так что можете сидеть на винде и использовать Whonix.
Whonix: операционная система для анонимуса
Обзор и настройка Whonix
Как пользоваться Whonix
Вопрос: Компания будет против если я захочу писать код своим стилем?

Лучший ответ: 1. Компания будет против, если таким стилем буду писать сайты ?
1. Будет против если есть какой-то определённый кодстайл, который ты будешь таким образом нарушать.
В первую очередь будет против команда, тк после тебя придётся всё переделывать.
2. Будет против, тк с этим стилем будешь знаком только ты => басфактор

2. Вообще Есть компании, которые придерживаются определеннего стиля кода или это каждый сам как хочет ?
Практически везде есть какой-то сложившийся стиль и набор библиотек.

Так что перед внедрением чего-то совсем нового - спрашивай у компании и руководства.
Сразу подготовь список за и против.

Худший ответ: Обычно один из этапов собеседования - написание тестового задания, где в том числе смотрят на стиль написания кода, если прям жестко не подойдет - Вас даже на собеседование не позовут. Но в целом нужно понимать, что для компании главное - эффективное решение поставленной задачи, и обычно на какие то мелочи (а стиль написания кода, если он читабельный и работает - это мелочи) легко закрывают глаза.
Вопрос: Как заставить WordPress работать на PHP 8.0?

Лучший ответ: Скорее всего тема виновата. Смотрите тему. Подключите отладчик, смотрите логи. Тема самописная или из оф. каталога? Если из оф. каталога, то пишите разработчикам. Это они должны привести тему в соответствие современным тенденциям.

Попробуйте плагины отключить и подключить по одному. Если плагин виноват, то так вычислите. 

Если все-таки самописная тема, то тут только поиск и устранение всех ошибок.

Кстати, вам же написано: посмотрите почту администратора. Туда прислали критическую ошибку, которая возникла.

Худший ответ: Wp-config.php включить дебаг с false на true.
И вдруг выяснится что ошибка связана с поддержкой скрипта, типо "эта функция устарела, используйте новую функцию на строке..."

Ну и ответьте себе на вопрос зачем вам php8.0 (новый невиданный функционал?) 
стабильной до сих считается 7.4 и 7.2.

Ах да кстати старые версии wp не работают с новым 8.0, поэтому половина плагинов отвалится.
Плагин перед установкой никто не читает, а ведь там написано "более не поддерживается в вашей версии ххх wp"
Вопрос: Zoom — как это устроено? Сложно ли сделать мини-аналог?

Лучший ответ: Поднимите свой сервер Jitsi Meet. В докере разворачивается легко, работает неплохо (с записью видео были сложности когда я его последний раз ковырял, но разрабы там чтото фиксили.. )

Худший ответ: Nextcloud Talk например.
Вопрос: Можно ли сделать хабр темным?

Лучший ответ: Нет. Но есть плагины для браузера, которые меняют тему на темную для любого (почти) сайта. Например, DarkReader нормально работает с хабром.

Худший ответ: Можно и вручную изучить стили и поменять их, но картинки по-прежнему будут рассчитаны на светлый фон. Некоторые картинки в статьях (png) так вообще имеют прозрачный фон, к сожалению, с которым сложно что-то сделать. Разве что инвертировать картинку... Но как (даже средствами js) детектить прозрачный фон у png? Никак... А если все картинки подряд инвертировать, то фотографии станут ужасны...
Вопрос: В чем принципиальное отличие POC от MVP?

Лучший ответ: POC - доказательство, что идея реализуема
MVP - минимально жизнеспособный продукт. Его уже можно монетизировать

Худший ответ: POC - доказательство, что идея реализуема
MVP - минимально жизнеспособный продукт. Его уже можно монетизировать
Вопрос: Закончил 11 класс, не знаю куда поступать, но интересуюсь программированием, мне куда?

Лучший ответ: У тебя есть 3 месяца лета чтобы выжать из себя максимум и максимально изучить программирование и английский. Потом ты должен успеть найти работу на Джуна.
И теперь учеба тебе не нужна. Чрез 5 лет, когда твои ровесники только начнут искать работу, ты будешь Синьером с большой зарплатой.
Сам к сожелению поступил после 9, сейчас заканчивается 1 курс, уже работаю на фрилансе, теперь хочу получить работу на удаленку. Когда это сделаю брошу учебу.
Мне 16 лет.

Худший ответ: Кроме непосредственно знаний программирования ВУЗ дает множество сопутствующих дисциплин, которые будут весьма полезны как в обычной жизни, так и при разработке - математика, физика, экономика, психология и т.п.

Выбор ВУЗа и конкретной специальности не столь критичен, так как большинство дисциплин одинаковые. 
В ГГНТУ, думаю, Вам подойдет любое из этих направлений:
Информатика и вычислительная техника 
Информационные системы и технологии 
Прикладная информатика 
Инфокоммуникационные технологии и системы связи
Вопрос: Как понять нюансы работы над реальным коммерческим проектом без трудоустройства в офис?

Лучший ответ: Ну мне не нужно научиться ездить на машине, мне нужно понять, как это делать теоретически. А дальше я уже сам додумаю, как я это буду тренировать практически.
На фрилансе перед тем как начать работать, тебе нужно найти заказчика, утрясти с ним проект, утрясти с ним вознаграждение и как оно будет - по частям или предоплата или после сдачи, утрясти отчетность перед заказчиком, подумать как сделать так, чтобы заказчик тебя не кинул, и был удовлетворен гарантиями что ты его не кинешь. Утрясти что будет если заказчик будет неудовлетворен, или захочет доработки, или захочет продолжить и расширить.

И только после этого начинаются нюансы разработки и программирования.

В офисе сразу идут нюансы разработки и программирования.

Так что хочешь идти во фриланс - вперед.

Худший ответ: А нафига вам это если вы собрались работать на фрилансе, там оно не так чтобы сильно нужно
Вопрос: Как блокировщик рекламы понимает что это реклама?

Лучший ответ: По таблицам доменов и css селекторов рекламы, которые публичны (каждый блокировщик таскает с собой такие, некоторые общие)
например списки ublock origin и https://easylist.to/ и https://gitlab.com/curben/urlhaus-filter#malicious... и т,п.

Худший ответ: Проверяют по списку "рекламных" доменов и не дают загружаться их контенту.
Например
И кстати, почему "реклама"? Любой элемент можно "вырезать".
Вопрос: Пытаюсь написать выдачу роли при присоединении в дискорд, но выдает ошибку, как решить?

Лучший ответ: Что делать, что делать... голову включить и посмотреть на вызов utils.get().
Тебя не смущает, что ты передаёшь список ролей в параметр, который называется "id гильдии"?
Передай коллекцию ролей первым позиционным параметром, без имени. Фильтр id= оставь, с ним всё ок.
И вообще, не понимаешь как использовать какой-то метод - ищи и читай документацию.

Худший ответ: Я уже не понимаю что сделать нужно.
Вопрос: Рекурсия, зачем она нужна, и используете ли вы её?

Лучший ответ: Самый простой пример: построение дерева элементов с неопределённым уровнем вложенности.

Неужели если я научусь ей пользоваться и приду в хорошую контору там все (особенно джуны) будут понимать мой код?
Умение пользоваться рекурсией не залог того, что твой код хороший и понятный.

Худший ответ: Если внутри функции делается несколько рекурсивных вызовов, то вариант цикл+стек будет смотреться сложно и вышеупомянутые джуны ощутят трудности его понимания. Или, например, кейс, когда есть взаимная рекурсия двух или более функций - там придется код как-то перекроить, смотря по ситуации.

Нерекурсивный вариант обязательно следует использовать, когда можно обойтись без стека, как в избитом примере вычисления факториала. Так же - когда существует ненулевая вероятность, что будет переполнение стека: например, функция работает с произвольным двоичным деревом, и может получить на вход очень сильно несбалансированное дерево большой высоты. Ещё есть разные специальные кейсы. Допустим, обход графа в глубину: если сделать его нерекурсивным, то можно будет легко заменить в функции стек на очередь и получить обход в ширину, или даже на приоритетную очередь, тогда будет "поиск по критерию стоимости"