Bu makalede, özyinelemeli bir işlev oluşturmayı öğreneceksiniz; kendini çağıran bir işlev.
Kendini çağıran bir işlev, özyinelemeli bir işlev olarak bilinir. Ve bu teknik, özyineleme olarak bilinir. Özyinelemeli bir işlev oluştururken, işlevin kendisini sonsuza kadar (sonsuza kadar) çağırmaması için bir koşul yaratmalısınız.
Swift'de özyineleme nasıl çalışır?
func recurse () (// deyimler recurse ()) recurse ()
Aşağıdaki şekil kendisini tekrar tekrar arayarak özyinelemenin nasıl çalıştığını göstermektedir.
Yukarıdaki akış diyagramında özyineleme sonsuz olarak yürütülür. Ancak, neredeyse her zaman, bazı koşullar karşılanana kadar çalışan bir özyineleme yaratırsınız.
Sonsuz özyinelemeyi önlemek için, Swift Koşullu İfadeleri içindeki özyinelemeli çağrıyı kullanın, örneğin if …
Örnek 1: N pozitif sayı yazdırın
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Aşağıdaki programı çalıştırdığınızda, çıktı:
Geri sayım: 3 2 1 0
Yukarıdaki programda ifade , konsolda Geri Sayım:print("Countdown:")
çıktısını verir . Ve ifade , bir parametre alan işlevi çağırır .countDownToZero(num:3)
Integer
İşlevin içindeki ifade countDownToZero()
yürütülür ve koşul num> 0
karşılanırsa işlev countDownToZero()
yeniden çağrılır countDownToZero(num: num - 1)
.
Koşul karşılanmazsa, işlev çağrısı yapılmaz ve özyineleme durur.
Bunu adım adım görelim
Yürütme adımlarıAdımlar | İşlev çağrısı | Basılı | num> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Evet |
2 | countDownToZero(2) | 2 | Evet |
3 | countDownToZero(1) | 1 | Evet |
4 | countDownToZero(0) | 0 | Hayır (Biter) |
Örnek 2: Bir sayının faktöriyelini bulun
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)")
Aşağıdaki programı çalıştırdığınızda, çıktı:
4'ün faktöriyeli 24'tür
Bu örnek nasıl işliyor?
Bunu adım adım görelim
Yürütme adımlarıAdımlar | Argüman geçti | Dönüş ifadesi | Değer |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * faktöriyel (of: 3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * faktöryel (/: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * faktöryel (of: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Bir sorunun çözümü yaklaşık iki adımda bulunabildiğinde, genellikle özyineleme, yinelemenin yerine kullanılır. İlk adım, işlemi tekrar etmezse bir çözüm arar.