今回は、「組合せの数」を求めるプログラムである。
異なるn個の整数からr個の整数を取り出す組合せの数$_{n}C_{r}$を求める。
なお、$_{n}C_{r}$は、次のように定義される。↓
$_{n}C_{r} =$ $ _{n-1}C_{r-1} $ + $_{n-1}C_{r} $
ただし、$_{n}C_{0}=_{n}C_{n}=1$ 、 $ _{n}C_{1}=n$
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.87.2)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 でコンパイルしている。
C言語のインストールについてはこちらをご参照ください。↓
組合せの数を求めるプログラム
//組合せの数を求めるプログラム
#include <stdio.h>
//異なるn個からr個の整数を取り出す組合せの数を返す
int combination(int n,int r)
{
if (r== 0 || r == n)
return 1;
else if (r == 1)
return n;
return combination(n - 1,r - 1) + combination(n - 1,r);
}
int main(void)
{
int n,r;
puts("異なるn個からr個の整数を取り出す組合せの数を求めます。");
printf("n:"); scanf("%d",&n);
printf("r:"); scanf("%d",&r);
printf("組合せの数は%dです。\n",combination(n,r));
return 0;
}
実行結果
異なるn個からr個の整数を取り出す組合せの数を求めます。
n:5
r:3
組合せの数は10です。
なお、念のため「keisan」サイトで検算してみた。
(参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ
コメント