Binomial əmsalını hesablamaq üçün aşağıdakı münasibətdən istifadə edə bilərsiniz:
Bir dəyişəni elan edib onu dəyəri ilə işarələyək. Sonra -i -ə vururuq və nəticəni -ə bölürük. Daha sonra -i -ə vurub -yə bölürük. Vurulma və bölmə prosesini dəfə ( -ə bölündükdən sonra C_n^{k}-nin pay və məxrəci vuruqçular daxil edir) davam etdiririk.
Rekursiv binomial əmsalını hesablamaq üçün aşağıdakı münasibətdən istifadə edə bilərsiniz:
Alqoritmin həyata keçirilməsi
Cnk funksiyası binomial əmsalının iterativ üsulla dəyərini hesablayır.
int Cnk(int n, int k)
{
int res = 1;
for(int i = 1; i <= k; i++)
res = res * (n - i + 1) / i;
return res;
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%d %d",&n,&k);Cavabı hesablayıb ekrana çıxarırıq.
res = Cnk(n,k);
printf("%d\n",res);Cnk funksiyası binomial əmsalının iterativ üsulla dəyərini hesablayır.
int Cnk(int n, int k)
{
int res = 1;
for(int i = 1; i <= k; i++)
res = res * (n - i + 1) / i;
return res;
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%d %d",&n,&k);Cavabı hesablayıb ekrana çıxarırıq.
res = Cnk(n,k);
printf("%d\n",res);Alqoritmin həyata keçirilməsi – rekursiya
Cnk funksiyası binomial əmsalının rekursiv üsulla dəyərini hesablayır.
int Cnk(int n, int k)
{
if (n == k) return 1;
if (k == 0) return 1;
return Cnk(n - 1, k - 1) + Cnk(n - 1, k);
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%d %d",&n,&k);Cavabı hesablayıb ekrana çıxarırıq.
res = Cnk(n,k);
printf("%d\n",res);Alqoritmin həyata keçirilməsi – rekursiya və yaddaş
Binomial əmsalının dəyərlərini yadda saxlamaq üçün massivini elan edək: dp[n][k] = C_n^{k}.
int dp[35][35];Cnk funksiyası binomial əmsalının rekursiv üsulla dəyərini hesablayır. Ehtiyat texnikasından istifadə edirik.
int Cnk(int n, int k)
{
if (n == k) return 1;
if (k == 0) return 1;
if (dp[n][k] != -1) return dp[n][k];
return dp[n][k] = Cnk(n - 1, k - 1) + Cnk(n - 1, k);
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%d %d",&n,&k);massivini işarələyirik.
memset(dp,-1,sizeof(dp));Cavabı hesablayıb ekrana çıxarırıq.
res = Cnk(n,k);
printf("%d\n",res);Java həyata keçirilməsi – rekursiya
import java.util.*;
public class Main
{
static int Cnk(int n, int k)
{
if (n == k) return 1;
if (k == 0) return 1;
return Cnk(n - 1, k - 1) + Cnk(n - 1, k);
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int k = con.nextInt();
int res = Cnk(n,k);
System.out.println(res);
con.close();
}
}Java həyata keçirilməsi – rekursiya və yaddaş
import java.util.*;
public class Main
{
static int dp[][];
static int Cnk(int n, int k)
{
if (n == k) return 1;
if (k == 0) return 1;
if (dp[n][k] != -1) return dp[n][k];
return dp[n][k] = Cnk(n - 1, k - 1) + Cnk(n - 1, k);
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int k = con.nextInt();
dp = new int[n+1][k+1];
for(int i = 0; i <= n; i++)
Arrays.fill(dp[i],-1);
int res = Cnk(n,k);
System.out.println(res);
con.close();
}
}Python həyata keçirilməsi – comb
Binomial əmsalını hesablamaq üçün daxili comb(n, k) = C_n^{k} funksiyasından istifadə edəcəyik.
import math;Giriş məlumatlarını oxuyuruq.
n, k = map(int, input().split())Cavabı hesablayıb ekrana çıxarırıq.
res = math.comb(n, k)
print(res)Python həyata keçirilməsi – faktorial
fact(x) funksiyası ədədinin faktorialını hesablayır.
def fact(x):
if x:
return fact(x - 1) * x
else:
return 1Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
n, k = map(int, input().split())Cavabı hesablayıb ekrana çıxarırıq.
res = fact(n) // (fact(k) * fact(n - k))
print(res)Python həyata keçirilməsi – yaddaşa görə rekursiya
Cnk funksiyası binomial əmsalının rekursiv üsulla dəyərini hesablayır. Məmorayz texnikasından istifadə edirik.
def Cnk(n, k, dp):
if n == k: return 1
if k == 0: return 1
if dp[n][k] != -1: return dp[n][k]
dp[n][k] = Cnk(n - 1, k - 1, dp) + Cnk(n - 1, k, dp)
return dp[n][k]Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
n, k = map(int, input().split())Binomial əmsalının dəyərlərini yadda saxlamaq üçün siyahısını elan edək: dp[n][k] = C_n^{k}.
dp = [[-1] * 35 for _ in range(35)]Cavabı hesablayıb ekrana çıxarırıq.
res = Cnk(n, k, dp)
print(res)