//Bezu koeffitsientlari
#include "stdafx.h"
#include
using namespace std;
int nod(int m, int n);
void bezu(int d, int m, int n, int bm, int bn);
int _tmain(int argc, _TCHAR* argv[]) {
int x,y,del,buf;
printf("Bezu koeffitsientlarini topish masalasi");
printf("\nIkkita natural son kiriting:");
printf("\nX= "); scanf("%d",&x);
printf("Y= "); scanf("%d",&y);
if (x < y) { buf = x; x = y; y = buf; }
del=nod(x,y);
printf("\nChiziqli kombinatsiya:\n");
bezu(del,x,y,1,1); system("pause"); return 0; }
41. Rekursiv algoritmlarga misollar keltiring (faktorialni hisoblash, fibonachchi sonlari va h.k.)
Agar protsedura yoki funktsiyaning o’zida o’ziga murojaat bo’lsa rekursiv deb ataladi.
Misol uchun, faktorialni hisoblash funktsiyasini quyidagicha yozish mumkin:
int Factorial (int n)
{
if (n<=0) return 1; //1 ni qaytarish
else
return n*Factorial(n-1); //rekursiv chaqirish
}
Agar n > 0 bo’lsa, Factorial funktsiyasi o’zini o’zi chaqiradi. Bu masalani yechish uchun rekursiv protsedurani (funktsiyani emas) qo’llash mumkin.
Bunda ssilka bilan berilgan parametr orqali (protsedurani e’lon qilishda uning nomi oldiga ssilka & belgisi qo’yilgan) qo’llaniladi. Protsedurani rekursiv chaqirishda bu qiymat o’zgaradi.
void Factorial (int n, int &fact)
{
if (n==0) fact=1; //rekursiya yakunlanadi
else {
Factorial(n-1, fact); //(n-1)! ni rekursiv hisoblash
fact*=n; //n!=n*(n-1)!
}
}
Funktsiyadan farqli ravishda protsedura ssilka orqali berilgan parametr yordamida bir nechta qiymatlarni qaytarish mumkin.
Dostları ilə paylaş: |