Szybka rekursja (z przykładami)

W tym artykule nauczysz się tworzyć funkcję rekurencyjną; funkcja, która sama siebie wywołuje.

Funkcja, która wywołuje samą siebie, jest znana jako funkcja rekurencyjna. Ta technika jest znana jako rekurencja. Tworząc funkcję rekurencyjną, musisz stworzyć warunek, aby funkcja nie wywoływała siebie w nieskończoność (nieskończenie).

Jak działa rekurencja w Swift?

 func recurse () (// instrukcje recurse ()) recurse () 

Poniższy rysunek pokazuje, jak działa rekurencja, wywołując siebie w kółko.

Na powyższym schemacie przepływu rekurencja jest wykonywana w nieskończoność. Jednak prawie zawsze tworzysz rekurencję, która jest wykonywana, dopóki nie zostanie spełniony jakiś warunek.

Aby zapobiec nieskończonej rekurencji, użyj wywołania rekurencyjnego wewnątrz instrukcji warunkowych Swift, np. If… else instrukcja.

Przykład 1: Wydrukuj N liczb dodatnich

 func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3) 

Po uruchomieniu następującego programu wynik będzie:

 Odliczanie: 3 2 1 0

W powyższym programie instrukcja print("Countdown:")wyświetla Countdown: w konsoli. Instrukcja countDownToZero(num:3)wywołuje funkcję, która przyjmuje parametr Integer.

Instrukcja wewnątrz funkcji jest countDownToZero()wykonywana i jeśli warunek num> 0jest spełniony, funkcja countDownToZero()jest ponownie wywoływana jako countDownToZero(num: num - 1).

Jeśli warunek nie jest spełniony, wywołanie funkcji nie jest wykonywane i rekursja zostaje zatrzymana.

Zobaczmy to w krokach

Kroki wykonawcze
Kroki Wywołanie funkcji Wydrukowano num> 0?
1 countDownToZero(3) 3 tak
2 countDownToZero(2) 2 tak
3 countDownToZero(1) 1 tak
4 countDownToZero(0) 0 Nie (kończy się)

Przykład 2: Znajdź silnię liczby

 func factorial(of num: Int) -> Int ( if num == 1 ( return 1 ) else ( return num * factorial(of:num - 1) ) ) let x = 4 let result = factorial(of: x) print("The factorial of (x) is (result)") 

Po uruchomieniu następującego programu wynik będzie:

 Silnia 4 to 24

Jak działa ten przykład?

Zobaczmy to w krokach

Kroki wykonawcze
Kroki Argument przeszedł Instrukcja zwrotu Wartość
1 4 return 4 * factorial(of:3) 4 * silnia (z: 3)
2 3 return 3 * factorial(of:2) 4 * 3 * silnia (z: 2)
3 2 return 2 * factorial(of:1) 4 * 3 * 2 * silnia (z: 1)
4 1 return 1 4 * 3 * 2 * 1

Zwykle rekurencja jest używana jako zamiennik iteracji, gdy rozwiązanie problemu można znaleźć w około dwóch krokach. Pierwszy krok wyszukuje rozwiązanie, jeśli nie, powtórz proces.

Interesujące artykuły...