Препоръчано, 2024

Избор На Редактора

Разлика между рекурсия и повторение

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

Сравнителна таблица

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

Дефиниция на рекурсия

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

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

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

 int factorial (int num) {int отговор; if (num == 1) {return 1; } else {answer = факториал (num-1) * num; // recursive calling} return (отговор); } 

В горния код, операторът in else показва рекурсията, тъй като операторът извиква функционалната функция (), в която се намира.

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

Итерацията е процес на изпълнение на набора от инструкции многократно, докато условието в итерационното изявление стане фалшиво. Изразът за итерация включва инициализацията, сравнението, изпълнението на операторите в итерационното изявление и накрая актуализирането на контролната променлива. След като контролната променлива се актуализира, тя отново се сравнява и процесът се повтаря, докато условието в итерационното изявление се окаже невярно. Итерационните отчети са "за" цикъл, "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