Rychlá rekurze (s příklady)

V tomto článku se naučíte vytvářet rekurzivní funkce; funkce, která si říká.

Funkce, která se sama nazývá, se nazývá rekurzivní funkce. A tato technika je známá jako rekurze. Při vytváření rekurzivní funkce musíte vytvořit podmínku, aby se funkce neomezovala sama na neurčito (nekonečně).

Jak rekurze funguje ve Swiftu?

 func recurse () (// příkazy recurse ()) recurse () 

Obrázek níže ukazuje, jak rekurze funguje opakovaným voláním.

Ve výše uvedeném vývojovém diagramu se rekurze provádí nekonečně. Téměř vždy však vytvoříte rekurzi, která se spustí, dokud není splněna nějaká podmínka.

Chcete-li zabránit nekonečné rekurzi, použijte rekurzivní volání uvnitř Swift Podmíněných příkazů, např. If… else.

Příklad 1: Tisk N kladných čísel

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

Když spustíte následující program, výstup bude:

 Odpočítávání: 3 2 1 0

Ve výše uvedeném programu print("Countdown:")vypisuje výstup Countdown: v konzole. A příkaz countDownToZero(num:3)volá funkci, která přebírá parametr Integer.

Příkaz uvnitř funkce se countDownToZero()provede a pokud je podmínka num> 0splněna, funkce countDownToZero()se zavolá znovu jako countDownToZero(num: num - 1).

Pokud podmínka není splněna, volání funkce se neprovede a rekurze se zastaví.

Podívejme se na to v krocích

Prováděcí kroky
Kroky Volání funkce Vytištěno počet> 0?
1 countDownToZero(3) 3 Ano
2 countDownToZero(2) 2 Ano
3 countDownToZero(1) 1 Ano
4 countDownToZero(0) 0 Ne (končí)

Příklad 2: Najděte faktoriál čísla

 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)") 

Když spustíte následující program, výstup bude:

 Faktoriál 4 je 24

Jak funguje tento příklad?

Podívejme se na to v krocích

Prováděcí kroky
Kroky Argument prošel Prohlášení o vrácení Hodnota
1 4 return 4 * factorial(of:3) 4 * faktoriál (z: 3)
2 3 return 3 * factorial(of:2) 4 * 3 * faktoriál (z: 2)
3 2 return 2 * factorial(of:1) 4 * 3 * 2 * faktoriál (z: 1)
4 1 return 1 4 * 3 * 2 * 1

Rekurze se obvykle používá jako náhrada iterace, když lze řešení problému najít asi ve dvou krocích. První krok hledá řešení, pokud ne, opakujte postup.

Zajímavé články...