Co to jest rekurencja ogona?

Rekursja ogonowa jest rodzajem wywołania metody programowania, w której metoda wywołuje samą siebie, a następnie natychmiast zwraca wartość tego drugiego wywołania. Innymi słowy, rekursja ogonowa występuje, gdy końcowa instrukcja wewnątrz metody jest kolejnym wywołaniem tej samej metody. Parametry w drugim wywołaniu metody zasadniczo różnią się od parametrów pierwszego, ale nie jest to wymagane. Aby ta rekursja działała, metoda, która jest wywoływana w sobie, musi zwrócić konkretną wartość, taką jak liczba, ciąg lub inny obiekt. Puste metody, które nie zwracają wartości, nie działają dobrze w przypadku rekursji.

Wymóg, że wywołanie rekurencyjne musi być ostatnią instrukcją w jego metodzie wywołującej, nie musi oznaczać, że wywołanie rekurencyjne jest ostatnim wierszem w metodzie. Właściwe wywołanie rekursji ogona można również znaleźć wewnątrz struktury kontrolnej, co oznacza, że ​​w kodzie źródłowym struktura kontrolna może zakończyć metodę, a nie wywołanie. Ważnym rozróżnieniem w tym przypadku jest to, że struktura kontrolna nie jest instrukcją programowania, ale wbudowaną częścią języka komputerowego.

Rekurencja ogona istnieje w wielu językach komputerowych, w tym w Javie i C++. Często te rekurencyjne wywołania można przepisać przy użyciu innych środków, takich jak pętle for, pętle while lub instrukcje goto. Użyteczność rekurencji można znaleźć podczas tworzenia wielu kolejnych wywołań tej samej metody. Rekurencja jest często najczystszym i najłatwiejszym sposobem wykonywania powtarzalnych zadań.

Typowym przykładem rekurencji ogona jest metoda obliczania silni liczby. Ten proces jest idealny, ponieważ zaczynając od dowolnej liczby, każda liczba, zanim zostanie pomnożona. Tak więc, aby znaleźć silnię liczby 5, właściwym procesem do wykonania tego byłoby pomnożenie 5*4*3*2*1. Rekurencja pojawia się ze względu na strukturę metody silni: jeśli silnia wynosi 1, zwróć 1, w przeciwnym razie zwróć silnię liczby podanej w metodzie minus jeden. Ta metoda jest również przydatna, ponieważ można ją równoważnie napisać przy użyciu dowolnego typu rekurencji ogona, z instrukcją sterującą lub bez niej wokół końcowego wywołania metody.

Rekurencja ogona to tylko jeden z przykładów wielu typów rekurencji. Koncepcja we wszystkich typach rekurencji jest zasadniczo taka sama, że ​​w pewien sposób metoda wywołuje samą siebie. Spośród tych typów rozróżnienie rekursji ogonowej polega na tym, że wartość wywołania rekurencyjnego jest natychmiast zwracana i nic więcej nie dzieje się w metodzie wywołującej po tym wywołaniu.