Простой совет, чтобы написать лучший код:

Прекратите использовать рекурсию, если только вы не используете язык, который ее ненавидит, и вам не нужно от нее избавляться. Рекурсия поощряет мистически трудный для чтения код, который имеет тенденцию к ошибкам и проблемам с ремонтопригодностью. Люди предпочитают не рефакторить его, потому что это раздражает, когда он занят. Тем не менее, я обнаружил, что он неоднократно всплывает в производственной кодовой базе, и во время экспертной оценки он считается элегантным  , особенно функциональными (высоко мыслящими?) программистами.

Когда я учился в школе, рекурсия активно использовалась во многих курсах по алгоритмам, чтобы подчеркнуть тип мышления. К сожалению, и только задним числом, я заметил, что многие члены моего класса изо всех сил пытались представить стек, связанный с рекурсией, потому что они никогда не объявляли его явно. Я думаю, что даже в сфере образования итеративный код лучше проиллюстрировал бы происходящее. Если вы когда-либо выполняли быструю сортировку с использованием рекурсии, я бы посоветовал вам написать ее итеративно, а не использовать собственные стеки. Это значительно упростит концепцию, как только вы прибьете ее.

Рекурсия скрывает структуру данных и манипулирование ею от сопровождающего. Явно определенные хранилища данных и структуры имеют огромную ценность в программировании, на самом деле структура — это самый самодокументируемый код, который вы можете написать, потому что данные управляют всем! По этой же причине в последнее время стал популярен декларативный код. Талантливые коллеги будут меньше бороться с чтением рекурсивных функций, но уверяю вас  — им все равно придется сделать паузу и подумать.

До сих пор я описывал концептуальные аргументы в пользу того, почему бы не использовать рекурсию, чтобы вы еще не были проданы. Есть и очевидные семантические преимущества. Наблюдение ошибки в условии для базового случая является относительно сложной задачей по сравнению с условием разрыва для цикла for или цикла while. Когда программист видит цикл, он должен инстинктивно знать, что нужно следить за бесконечным циклом. Это неверно для функции, которая может использовать рекурсию.

Создавайте код для своих коллег и, пожалуйста, остановите повторение рекурсии.