Published on

Swiftda Rekursiya

Authors

Biror funksiyaning o‘zi-o‘zini chaqirishi rekursiv funksiya deyiladi. Bu texnika esa rekursiya deb ataladi.

Real hayotdagi misol: ikkita parallel ko‘zguni bir-biriga qarama-qarshi qo‘ying. Ularning orasiga biror buyum qo‘yilsa, u cheksiz qayta aks etadi — bu rekursiyaga o‘xshaydi.

Rekursiyaning ishlash tizimi

func recurse() {
  ... ...  
  recurse()
  ...  ...     
}

recurse()

Bu yerda recurse() funksiyasi o‘zi-o‘zini qayta-qayta chaqirmoqda. Quyidagi rasm rekursiya qanday ishlashini ko‘rsatadi:

func

Rekursiyani to‘xtatish sharti

Agar rekursiyani to‘xtatish uchun biror shart berilmasa, funksiya cheksiz o‘zini chaqiraveradi.

Rekursiyani to‘xtatish uchun odatda if...else ishlatiladi.

Har doim rekursiv funksiyada ikki bo‘lak bo‘ladi:

  1. Rekursiv chaqiruv bo‘lagi
  2. Rekursiyani to‘xtatadigan bo‘lak

Misol:

func recurse() {

  if(condition) {
    // rekursiv chaqiruvni to‘xtatish
    recurse()
  }

  else {
    // rekursiv chaqiruv
    recurse()
  }
}

// funksiyani chaqirish 
recurse()

Misol:

Quyidagi dastur sonni 0 gacha kamaytirib boradi:

// sonni 0 gacha sanab tushish dasturi

func countDown(number: Int) {

  // sonni ekranga chiqarish
  print(number)

  // rekursiyani to‘xtatish sharti
  if number == 0 {
    print("Sanash to‘xtadi")
  }

  // rekursiya sharti
  else {
    // sonni kamaytirish
    countDown(number: number - 1)
  }
}

print("Sanash:")
countDown(number:3)

Natija:

Sanash:
3
2
1
0
Sanash to‘xtadi

Bu misolda countDown() funksiyasi o‘zi-o‘zini chaqiraveradi, toki son 0 bo‘lmaguncha.

number == 0 bo‘lganda rekursiya to‘xtaydi.

Dastur ishlash jarayoni:

IterationFunction callPrintnumber == 0 ?
1countDown(3)3false
2countDown(2)2false
3countDown(1)1false
4countDown(0)0true (rekursiya to‘xtaydi)

Misol:

func factorial(num: Int) -> Int {

  // rekursiyani to‘xtatish sharti
  if num == 0 {
    return 1
  } 

  // rekursiv chaqiruv
  else {
    return num * factorial(num: num - 1)
  }

}

var number = 3

// funksiya chaqiruvi
var result = factorial(num: number)
print("3 ning faktoriali", result)

Natija:

3 ning faktoriali 6

Bu yerda rekursiv funksiya factorial() chaqiruv davomida num ni har safar 1 taga kamaytiradi.

Ishlash jarayoni:

  • num = 3 → chaqiradi factorial(2)
  • num = 2 → chaqiradi factorial(1)
  • num = 1 → chaqiradi factorial(0)
  • num = 0 → 1 qaytaradi va rekursiya orqaga yechila boshlaydi.

Rekursiya orqali faktorial hisoblash

func

Rekursiyaning afzalliklari va kamchiliklari

1. Afzalliklar

  • Kodimiz qisqa va toza ko‘rinadi.
  • Ma’lum data structure va murakkab algoritmlarda (Graf va Tree traversal) rekursiya zarur.

2. Kamchiliklar

  • Iterativ dasturlarga qaraganda ko‘proq stack xotira ishlatadi.
  • Ko‘proq process vaqtini oladi.
  • Iterativ dasturlarga qaraganda debug qilish qiyinroq.