Рекомендуємо, 2024

Вибір Редакції

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

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

Діаграма порівняння

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

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

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

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

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

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

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

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

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

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

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

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

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

Основні відмінності між рекурсією та ітерацією

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

Висновок:

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

Top