I den här artikeln lär du dig att skapa en rekursiv funktion; en funktion som kallar sig själv.
En funktion som kallar sig själv är känd som en rekursiv funktion. Och den här tekniken är känd som rekursion. När du skapar en rekursiv funktion måste du skapa ett villkor så att funktionen inte kallar sig på obestämd tid (oändligt).
Hur fungerar rekursion i Swift?
func recurse () (// uttalanden recurse ()) recurse ()
Figuren nedan visar hur rekursion fungerar genom att kalla sig om och om igen.
I ovanstående flödesschema körs rekursion oändligt. Men nästan alla gånger skapar du en rekursion som körs tills något villkor är uppfyllt.
För att förhindra oändlig rekursion, använd det rekursiva samtalet i Swift villkorliga uttalanden, t.ex. om … annars uttalande.
Exempel 1: Skriv ut N positiva siffror
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
När du kör följande program blir resultatet:
Nedräkning: 3 2 1 0
I ovanstående program matas print("Countdown:")
ut Countdown: i konsolen. Och uttalandet countDownToZero(num:3)
kallar funktionen som tar en parameter Integer
.
Uttrycket inuti funktionen countDownToZero()
körs och om villkoret num> 0
är uppfyllt countDownToZero()
kallas funktionen igen som countDownToZero(num: num - 1)
.
Om villkoret inte är uppfyllt görs inte funktionssamtalet och rekursionen stoppas.
Låt oss se detta i steg
Utförande stegSteg | Funktionssamtal | Tryckt | antal> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Ja |
2 | countDownToZero(2) | 2 | Ja |
3 | countDownToZero(1) | 1 | Ja |
4 | countDownToZero(0) | 0 | Nej (slutar) |
Exempel 2: Hitta ett faktum för ett nummer
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)")
När du kör följande program blir resultatet:
Faktorn 4 är 24
Hur fungerar detta exempel?
Låt oss se detta i steg
Utförande stegSteg | Argumentet passerade | Returuttalande | Värde |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * fabrik (av: 3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * fabrik (av: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * fabrik (av: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Vanligtvis används rekursion som ersättning för iteration när lösningen på ett problem kan hittas i ungefär två steg. Det första steget söker efter en lösning, om inte upprepa processen.