Rekursiv funksiyalar
Funksiya tanasida o‘zini o‘zi chaqirsa rekursiya deyiladi. Rekursiya ikki xil bo‘ladi:
Oddiy – agar funksiya o‘z tanasida o‘zini chaqirsa;
Vositali – agar birinchi funksiya ikkinchi funksiyani chaqirsa, ikkinchisi esa o‘z navbatida birinchi funksiyani chaqirsa.
Misol 1: Masala sifatida faktorialni rekursiv funksiya yordamida hisoblashni olamiz. Bunda n faktarialni hisoblashda oldingi n-1 faktarialni, n-1 faktarialni hisoblashda esa undan oldinikini hisoblashimiz zarur. Faktarialni hisoblaydigan funksiya yaratamiz. U o‘zining ichida oldingilarini chaqiradi.
Masalaning matematik ifodasi:
Masala yechimining dasturi
#include
using namespace std;
long Faktorial(int n)
{
if (!n) return 1;
else return n * Faktorial (n – 1);
}
int main()
{
int n;
cin>>n;
cout<
}
Misol 2. Xuddi faktorialni hisoblashdagi kabi darajani xisoblash funksiyasini ham misol keltirishimiz mumkin.
Masalaning matematik ifodasi:
Masala yechimining dasturi:
#include
using namespace std;
double Daraja(double x, int n)
{
if (!n) return 1;
else return x * Daraja(x, n - 1);
}
int main()
{
int n;
double x;
cin>>x>>n;
cout<
}
Darajani xisoblashning yana bir usuli bu ikkilik daraja. Bunda ham rekursiv funksiyadan foydalanib darajani hisoblaymiz.
#include
using namespace std;
double Daraja(double x, int n)
{
if (!n) return 1;
double a = Daraja(x, n/2);
return n%2==0 ? a*a:a*a*x;
}
int main()
{
int n;
double x;
cin>>x>>n;
cout<
}
Namuna. Rekursiv funksiyadan foydalangan holda ikkita sondan raqamlari yig‘indisi katta bo‘lgan sonni topuvchi dastur tuzing.
#include
using namespace std;
int sum, sum_1, sum_2 ;
int raqam(int son)
{
sum += son % 10;
son = son / 10;
if (son == 0) return sum;
raqam (son);
}
int main()
{
int sum_1 = 0, sum_2 = 0;
int son_1, son_2;
cin>>son_1>>son_2;
sum_1 = raqam(son_1);
sum_2 = raqam(son_2);
if (sum_1 > sum_2) cout << son_1;
else cout<
}
Dostları ilə paylaş: |