2015-06-10 2 views
2

Я пытаюсь уменьшить число до требуемого диапазона значений, скажем x, пока оно не станет меньше 100. То, что я делаю, делит число на 10, пока оно не станет меньше 100.Итерация против рекурсии для простой обработки?

Что было бы лучший подход, рекурсия или итерация?

+0

Это может быть вопрос, основанный на мнениях, у каждого будет свое собственное оправдание его собственному ответу, но в вашем случае я бы предпочел пойти с циклом, поскольку рекурсия имеет свои собственные накладные расходы на поддержание стека вызовов. –

ответ

4

Итерация - ваш друг здесь.
Итерация: «Повторите что-нибудь, пока это не будет сделано».
Рекурсия: «Решите большую проблему, разбив ее на мелкие и кусочки меньшего размера, пока вы не сможете ее решить, объедините результаты ».

Рекурсия также намного медленнее, и когда итерация применима, она почти всегда предпочтительна.

Связанный вопрос: Recursion vs Iteration.

0

Рекурсивный подход обычно более дорог с точки зрения времени выполнения (поскольку вызовы методов вводят дополнительные служебные данные). Кроме того, это может привести к исключению StackOverflow, если рекурсия слишком глубока (может быть не применима к вашему делу, хотя, если ваше начальное число является достаточно маленьким, чтобы поддерживать низкое количество рекурсивных вызовов)

Поэтому итерация является предпочтительной.

0

Я предпочел бы итеративный подход над рекурсивным подходом. Замечательная вещь, которую вы можете сделать.

for (;num > 100; num /=10) {} 

Где num - номер, который вы делите.

В конце дня компилятор найдет лучшее, что можно сделать в целом, поэтому разработайте свои программы таким образом, чтобы вы находили наиболее логичным.

0

Рекурсия менее эффективна, чем итерация, так как обычно возникают дополнительные накладные расходы, связанные с выполнением рекурсивных вызовов из-за того, что стек вызовов так сильно используется во время рекурсии.

Также итерация легко понять и поддерживать, чем рекурсивные вызовы. В некоторых случаях на основе того, как вы пишете алгоритм, сложность кода может быть выше для рекурсивного алгоритма. см. Iterative and recursive version has same complexity?