В сущности, если функция чистая, то не важно что там творится внутри. Если через циклы проще или производительнее — пишите через циклы. Главное чтобы не было побочных эфектов (в том числе чтения/изменения глобального состояния). Да, если на 100% следовать принципам ФП, то от изменяемого состояния нужно отказаться вообще, но при программировании на императивных языках никто так не делает по ряду причин, среди которых отсутствие в таких языках синтаксического сахара, привычного функциональщикам, а также возможные проблемы с производительностью (речь идёт в основном как раз про использование рекурсии вместо циклов, как в Вашем случае).