Рекурсія не є власне кращою або гіршою, ніж циклі - кожна має свої переваги та недоліки, а такі залежать навіть від мови програмування (та реалізації).
Технічно ітеративні петлі краще підходять типовим комп'ютерним системам краще на апаратному рівні: на рівні машинного коду цикл - це лише тест і умовний стрибок, тоді як рекурсія (реалізована наївно) передбачає натискання кадру стека, стрибки, повернення та відскок назад зі стека. OTOH, багато випадків рекурсії (особливо тих, які тривіально еквівалентні ітераційним циклам) можуть бути записані таким чином, щоб уникнути натискання / вискоку стека; це можливо, коли рекурсивний виклик функції - це останнє, що відбувається в тілі функції перед поверненням, і це зазвичай відоме як оптимізація хвостового виклику (або оптимізація хвостової рекурсії ). Рекурсивна функція, оптимізована для хвостового виклику, в основному еквівалентна ітераційній петлі на рівні машинного коду.
Інша думка полягає в тому, що ітеративні петлі потребують руйнівних оновлень стану, що робить їх несумісними з чистою (без побічних ефектів) мовною семантикою. Це причина, чому у чистих мов, таких як Haskell, взагалі немає контурних конструкцій, а багато інших мов функціонального програмування або повністю їх бракують, або максимально уникають їх.
Причина, чому ці питання виникають так багато в інтерв'ю, полягає в тому, що для того, щоб відповісти на них, потрібно глибоке розуміння багатьох життєво важливих концепцій програмування - змінних, викликів функцій, обсягу, і, звичайно, циклів і рекурсії - і у вас є довести розумову гнучкість до таблиці, що дозволяє підійти до проблеми з двох докорінно різних ракурсів і переходити між різними проявами однієї і тієї ж концепції.
Досвід та дослідження свідчать про те, що існує людина між людьми, які мають здатність розуміти змінні, покажчики та рекурсії, та тими, хто цього не робить. Практично все інше в програмуванні, включаючи рамки, API, мови програмування та їх кращі випадки, можна придбати шляхом вивчення та досвіду, але якщо ви не в змозі розвинути інтуїцію цих трьох основних понять, ви непридатні бути програмістом. Переклад простого ітеративного циклу в рекурсивну версію - це якнайшвидший спосіб фільтрації непрограмістів - навіть досить недосвідчений програміст може це зробити за 15 хвилин, і це дуже мовно-агностична проблема, тому кандидат може вибрати мовою, яку вони обрали, а не спотикатися над ідіосинкратіями.
Якщо ви отримаєте таке питання в інтерв'ю, це хороший знак: це означає, що потенційний роботодавець шукає людей, які можуть програмувати, а не людей, які запам’ятали посібник із програмування.