Я думаю, что рекурсивные функции должны быть помещены в стек - каждый раз, когда функция вызывает себя, другая копия этой функции помещается в стек функций и так далее. Проблема в том, что в какой-то момент стеку не хватает места для хранения функций, поэтому, если числа становятся большими, рекурсивное решение может не сработать. Я знаю, потому что это укусило меня в задницу - у меня была отличная рекурсивная функция для free()
всего моего связанного списка, а затем я проверил его с самым большим связанным списком, который я мог сделать, и получил ошибку (я думаю, это было segfault - определенно должно было быть переполнение стека :)).
Итеративные функции не имеют этих ошибок - на машинном языке они выражаются в виде простых jmp или je и т. Д., Поэтому они никогда не выходят за пределы стека функций и, по сути, чище.
Это совершенно субъективный вопрос, но если бы не тот факт, что у рекурсии есть предел, встроенный в ваш компьютер, я бы сказал, что это гораздо лучшее решение. Некоторые итерационные решения проблем выглядят некрасиво, в то время как рекурсивное решение выглядит намного чище и приятнее. Но такова жизнь.