Zalecane, 2022

Wybór Redakcji

Różnica między rekurencją a iteracją

Rekursja i iteracja zarówno wielokrotnie wykonuje zestaw instrukcji. Rekurencja występuje wtedy, gdy instrukcja w funkcji wywołuje się wielokrotnie. Ta iteracja ma miejsce, gdy pętla jest wykonywana wielokrotnie, dopóki warunek kontrolny nie stanie się fałszywy. Podstawową różnicą między rekursją a iteracją jest to, że rekurencja jest procesem, zawsze stosowanym do funkcji. Ta iteracja dotyczy zestawu instrukcji, które chcemy wielokrotnie wykonywać.

Wykres porównania

Podstawa do porównaniaRekursjaIteracja
PodstawowyInstrukcja w treści funkcji wywołuje samą funkcję.Pozwala na wielokrotne wykonywanie zestawu instrukcji.
FormatW funkcji rekurencyjnej jest określony tylko warunek zakończenia (podstawowy przypadek).Iteracja obejmuje inicjalizację, warunek, wykonanie instrukcji w pętli i aktualizację (przyrosty i dekrementy) zmiennej sterującej.
ZakończenieInstrukcja warunkowa jest zawarta w ciele funkcji, aby wymusić powrót funkcji bez wywołania rekurencji.Instrukcja iteracji jest wykonywana wielokrotnie, dopóki nie zostanie osiągnięty określony warunek.
StanJeśli funkcja nie zbiegnie się do jakiegoś warunku nazwanego (przypadek podstawowy), prowadzi do nieskończonej rekurencji.Jeśli warunek kontrolny w instrukcji iteracji nigdy nie stanie się fałszywy, prowadzi do nieskończonej iteracji.
Nieskończone powtórzeniaNieskończona rekursja może spowodować awarię systemu.Nieskończona pętla wielokrotnie używa cykli procesora.
StosowanyRekursja jest zawsze stosowana do funkcji.Iteracja jest stosowana do instrukcji iteracji lub "pętli".
StosStos jest używany do przechowywania zestawu nowych zmiennych lokalnych i parametrów za każdym razem, gdy funkcja jest wywoływana.Nie używa stosu.
Nad głowąRekursja ma narzut wielokrotnych wywołań funkcji.Bez nadmiaru wielokrotnego wywołania funkcji.
PrędkośćPowolny w wykonaniu.Szybka realizacja.
Rozmiar koduRekursja zmniejsza rozmiar kodu.Iteracja sprawia, że ​​kod jest dłuższy.

Definicja rekursji

C ++ pozwala funkcji wywoływać się w jej kodzie. Oznacza to, że definicja funkcji posiada funkcję wywołania samej siebie. Czasami nazywa się to również " okrężną definicją ". Zestaw zmiennych lokalnych i parametrów używanych przez funkcję jest tworzony za każdym razem, gdy funkcja wywołuje się i jest przechowywana na górze stosu. Ale za każdym razem, gdy funkcja sama wywołuje, nie tworzy nowej kopii tej funkcji. Funkcja rekurencyjna nie zmniejsza znacząco rozmiaru kodu i nawet nie poprawia wykorzystania pamięci, ale robi to trochę w porównaniu z iteracją.

Aby zakończyć rekursję, musisz dołączyć instrukcję select do definicji funkcji, aby wymusić powrót funkcji bez wywoływania rekursywnego samouczka. Brak instrukcji select w definicji funkcji rekursywnej pozwoli raz wywołać funkcję w nieskończonej rekurencji.

Rozumiemy rekursję z funkcją, która zwróci silnię liczby.

 int factorial (int num) {int answer; if (num == 1) {return 1; } else {answer = factorial (num-1) * num; // wywołanie rekursywne} return (odpowiedź); } 

W powyższym kodzie instrukcja else zawiera rekursję, ponieważ instrukcja wywołuje funkcję factorial (), w której się znajduje.

Definicja iteracji

Iteracja to proces wielokrotnego wykonywania zestawu instrukcji, dopóki warunek w instrukcji iteracyjnej nie stanie się fałszywy. Instrukcja iteracji obejmuje inicjowanie, porównywanie, wykonywanie instrukcji wewnątrz instrukcji iteracji i na koniec aktualizację zmiennej sterującej. Po zaktualizowaniu zmiennej kontrolnej jest ona porównywana ponownie, a proces powtarza się, aż warunek w instrukcji iteracji okaże się fałszywy. Instrukcje iteracji to pętla "for", "while", pętla "do-while".

Instrukcja iteracji nie używa stosu do przechowywania zmiennych. Dlatego wykonanie instrukcji iteracji jest szybsze w porównaniu z funkcją rekursywną. Nawet funkcja iteracji nie ma narzut wielokrotnego wywoływania funkcji, co powoduje, że jej wykonanie jest szybsze niż funkcja rekursywna. Iteracja jest kończona, gdy warunek kontroli staje się fałszywy. Brak warunku kontrolnego w instrukcji iteracji może spowodować nieskończoną pętlę lub może spowodować błąd kompilacji.

Rozumiem iterację dotyczącą powyższego przykładu.

 int factorial (int num) {int answer = 1; // wymaga inicjalizacji, ponieważ może zawierać wartość śmieci przed jej inicjalizacją (int t = 1; t> num; t ++) // iteration {answer = answer * (t); return (odpowiedź); }} 

W powyższym kodzie funkcja zwraca silnię liczby za pomocą instrukcji iteracji.

Kluczowe różnice między rekurencją a iteracją

  1. Rekurencja występuje wtedy, gdy metoda w programie wielokrotnie wywołuje samą siebie, podczas gdy iteracja ma miejsce, gdy zestaw instrukcji w programie jest wielokrotnie wykonywany.
  2. Metoda rekursywna zawiera zestaw instrukcji, wywołanie samej instrukcji i warunek zakończenia, podczas gdy instrukcje iteracji zawierają inicjalizację, inkrementację, warunek, zestaw instrukcji w pętli i zmienną sterującą.
  3. Zdanie warunkowe decyduje o zakończeniu rekursji i wartości zmiennej sterującej decydują o zakończeniu instrukcji iteracyjnej.
  4. Jeśli metoda nie doprowadzi do stanu zakończenia, wchodzi w nieskończoną rekursję. Z drugiej strony, jeśli zmienna sterująca nigdy nie prowadzi do wartości zakończenia, instrukcja iteracji iteruje w nieskończoność.
  5. Nieskończona rekursja może doprowadzić do awarii systemu, podczas gdy nieskończona iteracja pochłania cykle procesora.
  6. Rekursja jest zawsze stosowana do metody, podczas gdy iteracja jest stosowana do zbioru instrukcji.
  7. Zmienne utworzone podczas rekursji są przechowywane na stosie, podczas gdy iteracja nie wymaga stosu.
  8. Rekurencja powoduje narzut wielokrotnego wywoływania funkcji, podczas gdy iteracja nie ma funkcji wywołującej narzut.
  9. Ze względu na wykonywanie funkcji wywoływanie rekurencji jest wolniejsze, natomiast wykonywanie iteracji jest szybsze.
  10. Rekursja zmniejsza rozmiar kodu, a iteracje wydłużają kod.

Wniosek:

Funkcja rekursywna jest łatwa do napisania, ale nie zachowuje się dobrze w porównaniu do iteracji, podczas gdy iteracja jest trudna do napisania, ale ich wydajność jest dobra w porównaniu z rekurencją.

Top