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 ataladihttps://www.texnoman.uz/post/rekursiya_-nima-uchun-u-kerak.html.
Rekursiv funksiya oʻzini — oʻzi chaqirgani uchun dasturchilar orasida quyi oldin rekursiya nimagligini tushunish kerak“ — Stephen Hawkinghttps://www.wisefamousquotes.com/stephen-hawking-quotes/to-understand-recursion-one-must-first-understand-recursion-1247188/.
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.

 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 <iostream.h>
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);
}https://tami.uz/matnga_qarang.php?id=1047.
 Rekursiyaga oid dastur
#include <bits/stdc++.h>
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;
}https://www.geeksforgeeks.org/recursive-functions/.
Rekursiv funksiyaning toʻxtash chegarasi boʻlmasa, amallar cheksiz bajarilaveradi, oqibatda dastur xatolik keltirib chiqaradi.

 Manbalar 

Turkum:dasturlash ,ma`lumotlar tuzilmalari