4

そのため、11 個の 10 次の 2 項係数を出力するプログラムを作成する必要があります。必要なことを実行するこのコードに出くわしましたが、なぜそれが機能するのかを理解しようとしています。

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

int の主要部分が機能する理由はわかりましたが、binomialCoeff の計算方法がわかりません。私はこのコーディングのすべてに比較的慣れていないので、助けてくれてありがとう!

4

1 に答える 1

4

これは実際にはかなりエレガントです。

この関数binomialCoeffは、2 つの基本条件を持つ再帰関数です。の場合k == 0は、 だけを返します1。0 を返す場合n<=k。したがって、その非が真の場合、 と から 1 を引いて同じ関数を呼び出しnますk。これが繰り返され、

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

N が 10 で K が 7 だとします。

あなたが得る

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

簡単にするために、最初に呼び出すのbinomialCoeffは res1 です。これにより、次のことが簡単になります。

10*(res1/6)

しかし、res1それ自体が呼び出しますbinomialCoeff

その結果

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

私たちはそれを呼び出すことができますres2

だから私たちは得る

10*(res2/6)

というように、基本条件が満たされるまで。その結果、一連nの が乗算されます。

于 2016-02-01T00:50:53.247 に答える