Разлика между рекурсия и итерация

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 4 Може 2024
Anonim
C++ | Модификаторы Типов | Указатели | 02
Видео: C++ | Модификаторы Типов | Указатели | 02

Съдържание


Рекурсията и итерацията многократно изпълняват набора от инструкции. Рекурсия е, когато извлечение във функция се обажда многократно. Итерацията е, когато цикълът се изпълнява многократно, докато контролиращото условие стане невярно. Основната разлика между рекурсия и итерация е, че е a рекурсия е процес, винаги прилаган към функция. Най- повторение се прилага към набора от инструкции, които искаме да се изпълняват многократно.

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениерекурсияПовторение
ОсновенИзразът в тяло на функция извиква самата функция.Позволява множеството инструкции да се изпълняват многократно.
форматПри рекурсивна функция се посочва само условие за прекратяване (базов случай).Итерацията включва инициализация, условие, изпълнение на оператор в цикъл и актуализация (нарастване и намаляване) на контролната променлива.
Прекратяване на договораУсловно изявление е включено в тялото на функцията, за да принуди функцията да се върне, без да се изпълнява рекурсивен разговор.Итерационната декларация се изпълнява многократно, докато се достигне определено условие.
състояниеАко функцията не се сближава до някакво състояние, наречено (основен случай), това води до безкрайна рекурсия.Ако условието за контрол в итерационния оператор никога не стане невярно, това води до безкрайна итерация.
Безкрайно повторениеБезкрайната рекурсия може да срине системата.Безкрайният цикъл използва CPU цикли многократно.
приложенЗа функциите винаги се прилага рекурсия.Итерацията се прилага към итерационни операции или „контури“.
купчинаСтекът се използва за съхранение на набора от нови локални променливи и параметри при всяко извикване на функцията.Не използва стек.
ОтгореРекурсията притежава накладните разходи за многократни извиквания на функции.Без режийни повтарящи се функции.
скоростБавно в изпълнение.Бърз в изпълнение.
Размер на кодаРекурсията намалява размера на кода.Итерацията прави кода по-дълъг.


Определение на рекурсия

C ++ позволява функция да се обажда в рамките на своя код. Това означава, че дефиницията на функцията притежава призив на функция към себе си. Понякога се нарича още „кръгово определение". Наборът от локални променливи и параметри, използвани от функцията, са новосъздадени всеки път, когато функцията извиква себе си и се съхраняват в горната част на стека. Но всеки път, когато дадена функция се обажда, тя не създава ново копие на тази функция. Рекурсивната функция не намалява значително размера на кода и дори не подобрява използването на паметта, но го прави някои в сравнение с итерацията.

За да прекратите рекурсията, трябва да включите оператор select в дефиницията на функцията, за да принудите функцията да се върне, без да давате рекурсивно повикване към себе си. Отсъствието на оператора select в дефиницията на рекурсивна функция ще остави функцията в безкрайна рекурсия веднъж извикана.

Нека разберем рекурсията с функция, която ще върне фактория на числото.


int factorial (int num) {int отговор; ако (num == 1) {връщане 1; } else {answer = factorial (num-1) * num; // рекурсивно повикване} връщане (отговор); }

В горния код, операторът в друга част показва рекурсията, тъй като операторът извиква функцията factorial (), в която пребивава.

Определение за итерация

Итерацията е процес на изпълнение на множеството инструкции многократно, докато състоянието в итерационния оператор стане невярно. Итерационният оператор включва инициализация, сравнение, изпълнение на операторите вътре в итерационния оператор и накрая актуализирането на контролната променлива. След актуализация на променливата на контрола тя се сравнява отново и процесът се повтаря, докато условието в оператора за итерация се окаже невярно. Итерационните изявления са цикъл „за“, цикъл „докато“, цикъл „до-докато“.

Итерационният оператор не използва стек за съхраняване на променливите. Следователно изпълнението на итерационния оператор е по-бързо в сравнение с рекурсивната функция. Дори итерационната функция няма натрупване на многократно извикване на функция, което също прави изпълнението й по-бързо от рекурсивната функция. Итерацията се прекратява, когато условието за контрол стане невярно. Липсата на условие за контрол в итерационния оператор може да доведе до безкраен цикъл или може да причини грешка при компилация.

Нека разберем итерацията по отношение на горния пример.

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

В горния код функцията връща фактория на числото, използвайки оператора за итерация.

  1. Рекурсия е, когато метод в програмата многократно се обажда, докато итерацията е, когато набор от инструкции в програмата се изпълняват многократно.
  2. Рекурсивният метод съдържа набор от инструкции, извикване на самия оператор и условие за прекратяване, докато итерационните операции съдържат инициализация, прираст, условие, набор от инструкции в цикъл и контролна променлива.
  3. Условното изречение решава прекратяването на стойността на рекурсията и контролната стойност на променливата решават прекратяването на итерационния оператор.
  4. Ако методът не доведе до условие за прекратяване, той влиза в безкрайна рекурсия. От друга страна, ако контролната променлива никога не води до стойността на прекратяване, операторът за итерация се повтаря безкрайно.
  5. Безкрайната рекурсия може да доведе до срив на системата, докато безкрайната итерация отнема CPU цикли.
  6. За метода винаги се прилага рекурсия, докато итерацията се прилага към набор от инструкции.
  7. Променливите, създадени по време на рекурсия, се съхраняват в стека, докато итерацията не изисква стек.
  8. Рекурсията причинява натрупването на многократно извикване на функция, докато итерацията няма функция, която извиква режийни.
  9. Поради извикването на функция надземното изпълнение на рекурсия е по-бавно, докато изпълнението на итерацията е по-бързо.
  10. Рекурсията намалява размера на кода, докато, повторенията правят код по-дълъг.

Заключение:

Рекурсивната функция е лесна за писане, но те не се представят добре в сравнение с итерацията, докато повторението е трудно да се запише, но тяхната ефективност е добра в сравнение с рекурсията.