Rekursiya

Rekursiya — Funksiya oʻziga oʻzi toʻgʻridan-toʻgʻri yoki qandaydir vosita orqali murojaat qilish jarayoniga rekursiya deyiladi va bunday funksiya rekursiv funksiya deb ataladi.

Rekursiv funksiya oʻzini — oʻzi chaqirgani uchun dasturchilar orasida quyi oldin rekursiya nimagligini tushunish kerak“ — Stephen Hawking. Rekursiya funksional dasturlashning asosiy elementlaridan hisoblanadi. Rekursiya deyarli hamma joyda ishlatiladi. Baʼzi masalalarning iterativ yechimi juda ham uzun boʻlib ketishi mumkin. Rekursiya esa kodni bir necha barobar qisqartirib berishi mumkin. Aksariyat tuzilmalar va algoritmlarni rekursiyasiz tasavvur qilib boʻlmaydi. Tree, Graph, Heap, Quick Sort, Merge Sort, … Bu ro'yhatni juda uzoq davom ettirish mumkin. Ayniqsa, murakkab tuzilmalar boʻlgan Tree va Graphlarda rekursiya har qadamda uchraydi.

Rekursiya
Screenshot Recursion via vlc

Kamchiligi

  • Rekursiya har doim xotiradan qoʻshimcha joy talab qiladi.
  • Rekursiv yechimda xato qilish ehtimoli yuqori, chunki rekursiya juda ham chalgʻituvchi.
  • Rekursiv yechimni xatosini topish qiyin.
  • Murakkab algoritmni hisoblash qiyin.

Algoritmi

Qutilar ichma-ich ixtiyoriy joylashtirilgan, qaysidir quti ichida kalit bor. Siz kalitni topish algoritmini tuzishingiz kerak

    Rekursiyaga qoʻyish uchun ushbu ikki shartni yozib olamiz
  • Ishlash sharti: Quti ichida ichki quti chiqsa, uni ochib koʻr. Agar ichki qutidan kalit chiqmasa tashqi qutining kelgan joyidan davom et.
  • Toʻxtash sharti: Quti ichidan kalit topilsa toʻxta.

Dasturi

Fibonachchi ketma ketligining n — hadini rekursiya qism dastur orqali hisoblovchi dastur

#include  int fib(int); int main() { int n; cout << "n="; cin >> n; cout << fib(n) << endl; return 0; } int fib(int k) { if (k == 0 || k == 1) return 1; else return fib(k - 1) + fib(k - 2); }

.

    Rekursiyaga oid dastur
#include  using namespace std; void tower(int n, char sourcePole, char destinationPole, char auxiliaryPole) { if(0 == n)     return; tower(n - 1, sourcePole, auxiliaryPole, destinationPole); cout << "Diskni ko'chiring "<< n << " dan " << sourcePole <<" ga "<< destinationPole << endl; tower(n - 1, auxiliaryPole, destinationPole,     sourcePole); } int main() {     tower(3, 'S', 'D', 'A');         return 0; } 

.

Rekursiv funksiyaning toʻxtash chegarasi boʻlmasa, amallar cheksiz bajarilaveradi, oqibatda dastur xatolik keltirib chiqaradi.

Manbalar

Tags:

Rekursiya KamchiligiRekursiya AlgoritmiRekursiya DasturiRekursiya ManbalarRekursiyaAlgoritmMerge SortTuzilma

🔥 Trending searches on Wiki O‘zbek:

HadisOmmaviy madaniyatTurizmXarakter (obraz)Qisqartma soʻzlarAngliyaOʻzbek qiziZulfiyaSteve JobsKirish soʻzlarKino sanʼatiXaritaBuddizmVaqtInnovatsiyaHamletFutbol maydoniTurkiya25-aprelViruslarLotin tiliUyushiq boʻlaklarBoborahim MashrabMagnit induksiyaBuxoro viloyatiGermaniyaLudwig van BeethovenSifatOrfoepiyaAtmosferaMuskullarGlukozaErkin AʼzamShavkat MirziyoyevBosh SahifaToshkent viloyatiVolontyorBaqara surasiBemorni parvarish qilishModal soʻzlarQon bosimiGormonlarPulsPopulyatsiyaGoogleSirdaryo (viloyat)Sodda gapBiotsenozJangi loyAbdulla QodiriyQobiliyatBosimYevropaFutbol tarixiAsrga tatigulik kunOʻzbekiston tarixi davlat muzeyiInflatsiyaDifferensial tenglamaBotir ZokirovEfirlarAzotPaygʻambarSaturnQayta tiklanadigan energiyaSamarqand viloyatiPulTermodinamikaning birinchi qonuniPeshob ajralishining buzilishiTinch okeaniKislorodOʻzbekistonOʻzbekiston viloyatlariShimoliy AmerikaOrqa miyaMatnKreditQutadgʻu biligUslubOʻzbekiston siyosiy partiyalari🡆 More