2016-02-01 24 views
5

Onbirinci sıradaki binom katsayılarını yazdıran bir program yazmam gerekiyor. İhtiyacım olan şeyi yapan bu kodla karşılaştım ama neden işe yaradığını anlamaya çalışıyorum. int ana kısmı çalışır, sadece binomialCoeff hesaplama nasıl yapılır alamadım nedenC program açıklamasında Binom Katsayı

#include<stdio.h> 

int binomialCoeff(int n, int k) 
{ 
    if(k == 0)return 1; 
    if(n <= k) return 0; 

    return (n*binomialCoeff(n-1,k-1))/k; 
} 

int main() 
{ 
    int k; 
    for(k=10;k>=0;k-=1) 
    { 
      printf("%d\n", binomialCoeff(10, k)); 
    } 

alıyorum. Bu kodlama maddelerinin hepsine nispeten yeniyim, bu yüzden yardımın için teşekkürler!

+2

Ne anlamıyorum: matematik formülü Özyinelemeyi veya C sözdizimi? – Jeff

+0

(n * binomialCoeff (n-1, k-1))/k formülünün n!/((N-k)! K!) Formülüne nasıl denk geldiğini anlamıyorum. – Rick

+2

Eski, yinelemeyi kullanır. Son formülün özyinelemeli sürümünü yazın ve bağlantıyı göreceğinizi düşünüyorum. – Jeff

cevap

5

Bu aslında oldukça zarif.

binomialCoeff işlevi, 2 temel koşulu olan yinelemeli bir işlevdir. k == 0 ise, yalnızca 1 döndürürsünüz. Eğer 0 döndürür n<=k Eğer bu olmayan doğruysa Yani, n ve k birini çıkararak aynı işlevi çağırmak. Eğer

10*(binomialCoeff(9,6)/7) 

olsun bu ((n-1, k-1) binomialCoeff)/

Yani N 10 olduğunu söylemek k

n * sonuçlanan tekrarlar ve K 7

olduğunu Sadece işleri basit tutmak için, ilk defa binomialCoeff numaralı telefonu arayarak res1 çağrılır. Hangi şeyler kolaylaştırır:

10*(res1/6) 

ama res1 kendisi

binomialCoeff biz

yüzden almak res2 çağırabilmesi

9*(binomialCoeff(8,5)/6) 

sonuçlanan çağırır

10*(res2/6) 
Baz koşullarını karşılayana kadar 210

; n 'un bir araya toplanmasıyla sonuçlanır.

+2

Tam bir açıklama için teşekkür ederim, şimdi anlıyorum! – Rick