2016-02-01 43 views
5

Quindi devo scrivere un programma che stampa gli undici coefficienti binomiali del decimo ordine. Mi sono imbattuto in questo codice che fa ciò di cui avevo bisogno, ma sto cercando di capire perché funzioni.Coefficiente binomiale nella spiegazione del programma C

#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)); 
    } 

ottengo il motivo per cui le int main opere di parte, io proprio non capisco come è fatto il calcolo binomialCoeff. Sono relativamente nuovo a tutto questo materiale di programmazione, quindi grazie per l'aiuto!

+2

Cosa non capisci: la formula matematica, la ricorsione o la sintassi C? – Jeff

+0

Non capisco come (n * binomialCoeff (n-1, k-1))/k corrisponda alla formula n!/((N-k)! K!) – Rick

+2

Il primo utilizza la ricorsione. Ricava la versione ricorsiva di quest'ultima formula e penso che vedrai la connessione. – Jeff

risposta

5

Questo è in realtà piuttosto elegante.

La funzione binomialCoeff è una funzione ricorsiva con 2 condizioni di base. Se k == 0, si restituisce solo 1. Se n<=k si restituisce 0. Quindi se il non di ciò è vero, si richiama la stessa funzione sottraendo uno da n e k. Questo si ripete con conseguente

n * (binomialCoeff (n-1, k-1))/k

così dicono N è 10 e K è 7

si ottiene

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

Per semplificare le cose, consente di chiamare la prima volta binomialCoeff è chiamato res1. Che semplifica le cose a:

10*(res1/6) 

ma res1 si chiama binomialCoeff

conseguente

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

che possiamo chiamare res2

così otteniamo

10*(res2/6) 

e così via fino a quando non si incontrano le condizioni di base; risultante in una serie di n moltiplicate insieme.

+2

Grazie per la spiegazione approfondita, lo capisco ora! – Rick

Problemi correlati