Kluczowa różnica: W programowaniu rekurencję można wyjaśnić, biorąc pod uwagę funkcję rekursywną. Funkcja rekursywna to taka, która ponownie wywołuje się, aby powtórzyć kod. Z drugiej strony, iterację uzyskuje się za pomocą funkcji iteracyjnej, która wykonuje pętle, aby powtórzyć część kodu.
W programowaniu zarówno rekurencja, jak i iteracja są używane do uzyskania powtórzeń. Odnoszą się do procesu, który powtarza się wiele razy. Rekursja opiera się na podejściu, w którym coś odnosi się do siebie, dopóki warunek nie zostanie spełniony. Mówi się, że metoda jest rekursywna, jeśli może się nazywać bezpośrednio lub pośrednio -
{
... Nazwa() ...
}
lub
void name ()
{
... gra() ...
}
void game () {
... Nazwa() ...
}
Aby uzyskać pomyślną rekursję, należy pamiętać, że każde wywołanie w procesie rekursji musi uprościć obliczenia. Rekursję osiąga się przez zdefiniowanie przypadku podstawowego.
int factorial (int N)
{
jeśli (N == 0) zwraca 1;
else return (N * silnia (N-1));
}
W tym przykładzie rekursja może być łatwo widoczna w instrukcji (N * silnia (N-1)), gdzie ponownie wywołuje funkcję silni. Rekurencja jest bardzo pomocna, ponieważ pomaga skrócić kod. Jednak rekursja jest nieco powolna w działaniu.
funkcja funkcji (n)
{
pętla var, wynik;
wynik = 1;
for (loop = 1; loop <= n; loop ++)
{
wynik = wynik * pętla;
}
wynik zwrotu;
}
W tym przykładzie pętlę uzyskuje się za pomocą liczb całkowitych od 1 do n, a instrukcja pętli <= n jest używana jako kryterium zatrzymania dalszej pętli. Możemy zatem stwierdzić, że te same wyniki można osiągnąć, stosując rekursję i iterację. Jednak oba opierają się na podejściach, które są nieco inne. Każdy algorytm rekursywny można również zapisać za pomocą iteracji (pętli).
Porównanie rekurencji i iteracji:
Rekursja | Iteracja | |
Definicja | Rekursja odnosi się do funkcji rekursywnej, w której ponownie wywołuje się, aby powtórzyć kod. | Iterację uzyskuje się za pomocą funkcji iteracyjnej, która wykonuje pętle w celu powtórzenia części sekcji kodu. |
Ważny punkt | Należy ustalić podstawowy przypadek | Konieczne jest określenie warunku zakończenia |
Wydajność | Stosunkowo wolny | Stosunkowo szybko |
Zużycie pamięci | Stosunkowo więcej | Stosunkowo mniej |
Kod | Mniejszy | Dłużej |
Nieskończone powtórzenia | Nieskończona rekurencja może spowodować awarię systemu | Nieskończone zapętlanie powoduje wielokrotne cykle procesora |
Struktura | Wybór | Powtórzenie |
Zmienne lokalne | Nie wymagane | wymagany |