2016-02-01 10 views
5

Also muss ich ein Programm schreiben, das die elf Binomialkoeffizienten 10. Ordnung ausdruckt. Ich bin auf diesen Code gestoßen, der tut, was ich brauche, aber ich versuche zu verstehen, warum es funktioniert.Binomial-Koeffizient in C-Programm Erklärung

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

ich, warum die int Hauptteil funktioniert, ich verstehe es einfach nicht, wie die binomialCoeff Berechnung gemacht wird. Ich bin relativ neu in all diesen Coding-Sachen, also danke für die Hilfe!

+2

Was verstehst du nicht: die mathematische Formel, Rekursion oder C-Syntax? – Jeff

+0

Ich verstehe nicht, wie (n * binomialCoeff (n-1, k-1))/k entspricht der Formel n!/((N-k)! K!) – Rick

+2

Die erste verwendet Rekursion. Leiten Sie die rekursive Version der letzteren Formel ab und ich denke, Sie werden die Verbindung sehen. – Jeff

Antwort

5

Das ist eigentlich ziemlich elegant.

Die Funktion binomialCoeff ist eine rekursive Funktion mit 2 Grundbedingungen. Wenn k == 0, geben Sie nur 1 zurück. Wenn n<=k Sie 0 zurückgeben. Wenn das nicht wahr ist, rufen Sie dieselbe Funktion ab, indem Sie eins von n und k subtrahieren. Dies wiederholt sich in

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

So sagen N 10 und K 7

Sie

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

Nur um die Dinge einfach zu halten, rufen wir das erste Mal binomialCoeff heißt res1. Dies vereinfacht die Dinge an:

10*(res1/6) 

aber res1 selbst nennt binomialCoeff

was

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

die wir nennen können res2

so erhalten wir

10*(res2/6) 

und so weiter, bis Sie die Grundbedingungen erfüllen; in einer Reihe von n zusammen multipliziert.

+2

Danke für die gründliche Erklärung, ich verstehe es jetzt! – Rick