Різниця між рекурсією та ітерацією

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 4 Травень 2024
Anonim
Звідки береться мова? Частина 1: генетика, нейрологія і рекурсія | Квантова філологія
Відеоролик: Звідки береться мова? Частина 1: генетика, нейрологія і рекурсія | Квантова філологія

Зміст


Рекурсія та ітерація неодноразово виконують набір інструкцій. Рекурсія - це коли вислів у функції викликає себе неодноразово. Ітерація - це коли цикл повторно виконується, поки умова керування не стане помилковою. Основна різниця між рекурсією та ітерацією полягає в тому, що це a рекурсія це процес, який завжди застосовується до функції. The ітерація застосовується до набору інструкцій, які ми хочемо неодноразово виконувати.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняРекурсіяІтерація
ОсновніОператор у тілі функції викликає саму функцію.Дозволяє повторно виконувати набір інструкцій.
ФорматУ рекурсивній функції задається лише умова припинення (базовий випадок).Ітерація включає ініціалізацію, умову, виконання оператора в циклі та оновлення (збільшення та зменшення) контрольної змінної.
ПрипиненняУ тіло функції включено умовне твердження, щоб змусити функцію повертатися, не виконуючи виклик рекурсії.Заява про ітерацію повторно виконується до досягнення певної умови.
УмоваЯкщо функція не збігається з деякою умовою, званою (базовий випадок), це призводить до нескінченної рекурсії.Якщо умова контролю в ітераційній заяві ніколи не стає хибною, це призводить до нескінченної ітерації.
Нескінченне повторенняНескінченна рекурсія може призвести до краху системи.Нескінченний цикл повторно використовує цикли процесора.
ЗастосовуєтьсяДля функцій завжди застосовується рекурсія.Ітерація застосовується до ітераційних операцій або циклів.
СтекСтек використовується для зберігання набору нових локальних змінних та параметрів щоразу, коли функція викликається.Не використовує стек.
НакладніРекурсія має накладні витрати на повторні виклики функцій.Немає накладних витрат повторного виклику функції.
ШвидкістьПовільний у виконанні.Швидкий у виконанні.
Розмір кодуРекурсія зменшує розмір коду.Ітерація робить код довшим.


Визначення рекурсії

C ++ дозволяє функції зателефонувати в межах свого коду. Це означає, що визначення функції має виклик функції до себе. Іноді його також називають "кругові визначення". Набір локальних змінних та параметрів, що використовуються функцією, створюються заново щоразу, коли функція викликає себе і зберігається у верхній частині стека. Але кожен раз, коли функція викликає себе, вона не створює нової копії цієї функції. Рекурсивна функція не суттєво зменшує розмір коду і навіть не покращує використання пам’яті, але робить це деяким порівняно з ітерацією.

Щоб припинити рекурсію, ви повинні включити у визначення функції функцію select, щоб змусити функцію повертатися, не надаючи собі рекурсивного виклику. Відсутність оператора select у визначенні рекурсивної функції дозволить функцію в нескінченній рекурсії один раз викликатися.

Давайте розберемося з рекурсією з функцією, яка поверне факторіал числа.


int factorial (int num) {int відповідь; if (num == 1) {повернути 1; } else {відповідь = фактичний (число-1) * число; // рекурсивний дзвінок} повернення (відповідь); }

У наведеному вище коді оператор в іншій частині показує рекурсію, оскільки оператор викликає функцію factorial (), в якій він знаходиться.

Визначення ітерації

Ітерація - це процес виконання набору інструкцій багаторазово, поки умова в ітераційному операторі не стане помилковою. Оператор ітерації включає ініціалізацію, порівняння, виконання операторів всередині оператора ітерації та нарешті оновлення змінної керування. Після оновлення змінної управління вона порівнюється знову, і процес повторюється, поки умова в ітераційному операторі не виявиться помилковою. Ітераційні операції - це цикл "for", цикл "while", цикл "do-while".

Оператор ітерації не використовує стек для зберігання змінних. Отже, виконання оператора ітерації швидше порівняно з рекурсивною функцією. Навіть ітераційна функція не має накладних витрат на повторний виклик функції, що також робить її виконання швидшим, ніж рекурсивна функція. Ітерація припиняється, коли умова контролю стає помилковою. Відсутність умови контролю в ітераційному операторі може призвести до нескінченного циклу або до помилки компіляції.

Давайте розберемося з ітерацією щодо наведеного вище прикладу.

int factorial (int num) {int відповідь = 1; // потребує ініціалізації, оскільки воно може містити значення сміття перед його ініціалізацією для (int t = 1; t> num; t ++) // ітерація {answer = відповідь * (t); повернення (відповідь); }}

У наведеному вище коді функція повертає факторіал числа за допомогою оператора ітерації.

  1. Рекурсія - це коли метод у програмі неодноразово викликає себе, тоді як ітерація - це набір інструкцій у програмі, які неодноразово виконуються.
  2. Рекурсивний метод містить набір інструкцій, виклик самого оператора та умову завершення, тоді як ітераційні операції містять ініціалізацію, приріст, умову, набір інструкцій у циклі та змінну управління.
  3. Умовний оператор визначає припинення рекурсійного значення, а значення змінної керування визначає припинення оператора ітерації.
  4. Якщо метод не призводить до умови припинення, він переходить до нескінченної рекурсії. З іншого боку, якщо змінна керування ніколи не призводить до значення завершення, ітераційний оператор повторюється нескінченно.
  5. Нескінченна рекурсія може призвести до краху системи, тоді як безмежна ітерація вимагає циклів процесора.
  6. Для методу завжди застосовується рекурсія, тоді як ітерація застосовується до набору інструкцій.
  7. Змінні, створені під час рекурсії, зберігаються в стеці, тоді як для ітерації не потрібен стек.
  8. Рекурсія викликає накладні витрати на повторний виклик функції, тоді як, ітерація не має функції, яка викликає накладні витрати.
  9. Завдяки виклику функції накладне виконання рекурсії відбувається повільніше, тоді як виконання ітерації відбувається швидше.
  10. Рекурсія зменшує розмір коду, тоді як ітерації збільшують код.

Висновок:

Рекурсивну функцію легко записати, але вони працюють не так добре, як порівняно з ітерацією, тоді як ітерацію важко записати, але їх ефективність хороша порівняно з рекурсією.