⬅️ Bosh sahifaga

🐍 Rekursiv Funksiyalar

Python dasturlash tili

📚 🔄 💻

Maqsad: Rekursiya tushunchasi, base case va amaliy misollarni o'rganish

Davomiyligi: 120 daqiqa (2 soat)

📋 Dars Rejasi

🎯 Kirish

Rekursiya tushunchasi

20 daqiqa

🛑 Base Case

To'xtash sharti va ahamiyati

25 daqiqa

💡 Amaliy Misollar

Fibonacci, Faktorial va boshqalar

20 daqiqa

🏋️ Mashqlar

Amaliy mashg'ulotlar

25 daqiqa

📝 Xulosa

Uy vazifasi va savollar

30 daqiqa

🤔 Rekursiya nima?

Ta'rif:

Rekursiya — bu funksiyaning o'zini o'zi chaqirishi

🔄 Oddiy misol:

5 dan 1 gacha sanash

def sanash(son): print(son) if son > 1: sanash(son - 1) # ← O'zini chaqirmoqda! sanash(5)
sanash(5) → print(5) → sanash(4)
sanash(4) → print(4) → sanash(3)
sanash(3) → print(3) → sanash(2)
sanash(2) → print(2) → sanash(1)
sanash(1) → print(1) → TO'XTAYDI ✋

⚠️ Ehtiyot bo'ling!

🚨 Cheksiz Rekursiya

Agar to'xtash sharti bo'lmasa...

def xato(): print("Cheksiz rekursiya!") xato() # ← Hech qachon to'xtamaydi! xato() # RecursionError!

Natija: RecursionError: maximum recursion depth exceeded

✅ Yechim: Base Case kerak!

Har bir rekursiv funksiya to'xtash shartiga ega bo'lishi kerak

🛑 Base Case (Asosiy Holat)

Base Case nima?

Bu rekursiyaning to'xtash sharti - eng oddiy holat

📊 Faktorial misolida:

def faktorial(n): if n == 0 or n == 1: # ← Base Case return 1 return n * faktorial(n - 1) print(faktorial(5)) # 5! = 120

🔄 Jarayon:

faktorial(5) → 5 × faktorial(4)
faktorial(4) → 4 × faktorial(3)
faktorial(3) → 3 × faktorial(2)
faktorial(2) → 2 × faktorial(1)
faktorial(1) → 1 ✅ (BASE CASE)
Natija: 5 × 4 × 3 × 2 × 1 = 120

🌟 Fibonacci Ketma-ketligi

Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Har bir son = oldingi ikki sonning yig'indisi

def fibonacci(n): if n == 0: # Base case 1 return 0 if n == 1: # Base case 2 return 1 return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(6)) # 8

🎯 Interaktiv Demo:

Fibonacci sonini hisoblang:

Natija bu yerda ko'rinadi...

🔄 Stringni Teskari Qilish

def teskari_qil(matn): if len(matn) <= 1: # Base case return matn return matn[-1] + teskari_qil(matn[:-1]) print(teskari_qil("salom")) # "molas"

🔍 Qadam ba qadam:

teskari_qil("salom") → "m" + teskari_qil("salo")
teskari_qil("salo") → "o" + teskari_qil("sal")
teskari_qil("sal") → "l" + teskari_qil("sa")
teskari_qil("sa") → "a" + teskari_qil("s")
teskari_qil("s") → "s" ✅ (BASE CASE)
Natija: "m" + "o" + "l" + "a" + "s" = "molas"

So'zni teskari qiling:

Natija bu yerda ko'rinadi...

➕ Sonlar Yig'indisi

1 dan N gacha bo'lgan sonlar yig'indisi

def yigindi(n): if n == 1: # Base case return 1 return n + yigindi(n - 1) print(yigindi(4)) # 1+2+3+4 = 10
yigindi(4) → 4 + yigindi(3)
yigindi(3) → 3 + yigindi(2)
yigindi(2) → 2 + yigindi(1)
yigindi(1) → 1 ✅ (BASE CASE)
Natija: 4 + 3 + 2 + 1 = 10

1 dan N gacha yig'indini hisoblang:

Natija bu yerda ko'rinadi...

🏋️ Amaliy Mashqlar

📝 Mashq 1: Daraja Hisoblash

Vazifa: daraja(son, daraja) funksiyasini yarating

def daraja(son, daraja): if daraja == 0: # Base case return 1 return son * daraja(son, daraja - 1) print(daraja(2, 3)) # 2³ = 8

📝 Mashq 2: Raqamlar Soni

Vazifa: Sondagi raqamlar sonini toping

def raqamlar_soni(son): if son < 10: # Base case return 1 return 1 + raqamlar_soni(son // 10) print(raqamlar_soni(12345)) # 5

O'z funksiyangizni sinab ko'ring:

^
Natija bu yerda ko'rinadi...

🎯 Xulosa

✅ Bugun o'rganganlarimiz:

  • 🔄 Rekursiya - funksiyaning o'zini chaqirishi
  • 🛑 Base Case - to'xtash sharti muhim!
  • 📊 Faktorial - klassik misol
  • 🌟 Fibonacci - ketma-ketlik hisoblash
  • 🔄 String - teskari qilish
  • Yig'indi - sonlarni jamlash

🏠 Uy Vazifasi:

  1. sanash(6) - 6 dan 1 gacha sanash funksiyasi
  2. daraja(3, 4) - 3⁴ = 81 hisoblash
  3. fibonacci(7) - 7-chi Fibonacci soni
  4. palindrom(matn) - so'z palindrom ekanligini tekshirish

⚠️ Eslatma:

Har doim Base Case ni unutmang! Aks holda cheksiz rekursiya bo'ladi.

❓ Savollar va Javoblar

🤔 Tez-tez beriladigan savollar:

1. Rekursiya qachon foydali?

✅ Muammo kichikroq qismlarga bo'linishi mumkin bo'lganda

✅ Daraxt yoki grafik strukturalar bilan ishlashda

✅ Matematik formulalar uchun

2. Rekursiya yoki Loop?

🔄 Rekursiya: Kod qisqa va tushunarli

🔁 Loop: Tezroq va kamroq xotira

3. Rekursiya qancha chuqur bo'lishi mumkin?

🐍 Python da odatda ~1000 marta

⚙️ sys.setrecursionlimit() bilan o'zgartirish mumkin

📚 Keyingi Dars:

Lambda Functions: Tushuncha, real hayotdagi misollar

🗓️ Keyingi hafta, o'sha vaqt

🎉 Rahmat! Savollaringiz bormi? 🙋‍♂️🙋‍♀️