Приветствую Вас ГостьВторник, 14.05.2024, 23:54

Каталог статей


Стив Макконнелл "Совершенный код". Рекурсия

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

Советы по использованию рекурсии

Убедитесь, что рекурсия остановится

Предотвращайте бесконечную рекурсию с помощью счетчиков безопасности

Ограничьте рекурсию одним методом

Следите за стеком

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

Вот рекурсивная версия вычисления факториала:

int Factorial( int number ) {
   if ( number == 1 ) {
      return 1;
   }
   else {
      return number * Factorial( number - 1 );
   }
}

Не считая медленного выполнения и непредсказуемого использования памяти, рекурсивный вариант функции трудней для понимания, чем итеративный вариант:

int Factorial( int number ) {
   int intermediateResult = 1;
   for ( int factor = 2; factor <= number; factor++ ) {
      intermediateResult = intermediateResult * factor;
   }
   return intermediateResult;
}

Из этого примера можно усвоить три урока.

  • Первый: учебники по ВычТеху не оказывают миру услугу своими примерами рекурсии.
  • Второй, и более важный: рекурсия — гораздо более мощный инструмент, чем можно предположить из сбивающих с толку примеров расчета факториала и чисел Фибоначчи.
  • Третий — самый важный: вы должны рассмотреть альтернативные варианты перед использованием рекурсии. Иногда один способ работает лучше, иногда — другой. Но прежде чем выбрать какой-то один, надо рассмотреть оба.
Категория: Стив Макконнелл "Совершенный код" | Добавил: leshic (15.11.2021)
Просмотров: 162 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
Стив Макконнелл "Совершенный код" [20]
Стив Макконнелл "Совершенный код"
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0