Rekurrent qatorlar
. Rekurrent qator deb, shunday qatorga aytiladiki bu
qatorning n chi hadi n ning qiymatiga va qatorning oldingi elementlariga bog`lik
bo`ladi. Bu bog`liklikni aks ettiruvchi formula rekurrent formula deb ataladi.
256
Masalan, n! (faktorial ) ya`ni n gacha sonlar ko`paytmasini qo`yidagi rekurrent
formula yordamida hisoblash mumkin:
S0=1, Sn=Sn-1*n
Bu formulaga asoslangan dasturning asosiy qismi qo`yidagicha yoziladi:
For(int s=1,i=1;i<=n;i++) s*=i;
Rekurrent qatorga yana bir misol Fibonachchi sonlari qatori bo`lib, bu qator
quyidagi rekurrent formulalar asosida ifodalanadi:
S0=1, S1=1,Sn=Sn-1+ Sn-2
Berilgan n gacha bo`lgan Fibonachchi sonlarini hisoblash dasturi:
29-listing
.
Output:
…
{ int n,S=0;
while (1)
{ cin >> n;
if (n>2) break;
cout<<(" n qiymati noto`g`ri kiritilgan"); };
for(int S0=1,S1=1,i=3;i<=n;i++)
{ S=S0+S1; S0=S1; S1=S; cout<<("\n ",i,S);};}
Cheksiz qatorlar
. Matematikada odatda biror qiymatni hisoblash shu
miqdorga cheksiz yaqinlashuvchi qator hadlarini hisoblashga olib keladi. Amalda
cheksiz qator hadlarini hisoblash yaqinlashish sharti bajarilguncha davom etadi va
bu shartga mos keluvchi qator hadi izlanayotgan miqdorning taqribiy qiymati deb
olinadi. Odatda yaqinlashish sharti sifatida shart qabul qilinadi. Bu yerda eps
oldindan berilgan son. Qator hadlarini rekurrent formulalar yordamida ifodalash
dasturlashni ancha yengillashtiradi. Matematikada ? sonini ?/4=1-1/2!+1/3!-
1/4!+…+(-1)(i+1)*1/i!+... cheksiz qator yordamida hisoblash mumkinligi
isbotlangan. Bu qatorni quyidagi rekurrent formulalar yordamida ifodalash
mumkindir:
R1=1.0, S1=1.0,Ri=-ri-1*(1/i), Si=Si-1+Ri;
257
Bu masalani yechishning while operatori yordamida tuzilgan dasturini ko`rib
chiqamiz:
30-listing
.
Output:
#include
{ double eps;
cout<<(“\n eps=”); cin>>(“%f”,&eps);
int i=2;
double r=1.0;
double s=1.0;
while((r>eps)||(r<-eps));
{ s+=r;
r =- r*(1/i);
i++;}
cout<<(“pi=%f”,s*4); }
Shu masalaning do while operatori yordamida tuzilgan dasturi:
31-listing
.
Output:
#include
{ double eps;
cout<<(“\n eps=”); cin>>(“%f”,&eps);
int i=1;
double r=1.0;
double s=0.0;
do
{ s+=r;
r=-r*(1/i);
i++;}
while((r=>eps)||(r<=-eps));
cout<<(“pi=%f”,s*4);}
258
Shunga e`tibor berish kerakki, tekshirish takrorlash tanasi bajarilgandan
so`ng amalga oshirilgani uchun kichik yoki teng sharti qo`yilgandir.
Shu masalani for operatori yordamida tuzilgan dasturi:
32-listing
.
Output:
#include
{ double eps;
cout<<(“\n eps=”); cin>>(“%f”,&eps);
for(int i=1, double r=1.0,double s=1.0; ((r>eps)||(r<-eps));i++)
{ r=-r*(1/i);s+=r};
cout<<(“pi=%f”,s*4);}
|