Используй то, что более удобно. Если реализация очевидна в терминах цикла, не следует использовать рекурсию. И наоборот. Так, если мыслишь решение задачи как функциональную зависимость (пусть для того же факториала), то тебе поможет рекурсия. Она позволит отделить тебе одно вычисление от другого, которое опирается только на результат первого. Впрочем, если ты четко видишь, что именно следует делать с переменными предыдущей итерации, чтоб получить следующий результат, то цикл будет организовать проще.
Поддерживать, опять же, проще тот код, в котором четко просматривается логика (эта оценка субъективна).
Ответь себе на вопрос: что такое факториал? «n!=n*(n-1)!, если n>1; n!=1 иначе» или «n! есть то, что получится, умножив подряд 1 на 2, на 3, на 4, ..., на n»
Или же такой: какой вариант приходит тебе первым, если требуется просуммировать элементы в динамическом списке? Создать указатель, идти по списку до конца и прибавлять к переменной, пока указатель не станет нулевым? Или просуммировать первый элемент с суммой хвоста (если тот не пуст)?
Для каждой задачи первый приходящий в голову вариант будет определять, к чему ты ближе, что тебе будет удобнее использовать, что будет проще читать.