IEにおいて、
[Math Processing Error] となって数式等が正しく表示されないときは、
互換表示をOFFにすること!
階乗(factorial)の計算
$n$個の異なる物を並べる並べ方の数は$n\times(n-1)\times\cdots\times 2\times 1$である。
階乗を計算するプログラム(関数)を作成する
仕様
- 負の整数が入力されるまで、キー入力された整数の階乗を計算し表示する
作成
- 階乗を計算する関数 int fact( int n ); があるとして、
- まず、それを呼び出すプログラムを考え、
/* 階乗を計算するプログラム */
#include <stdio.h>
main()
{
int fact( int n );
int n;
printf("階乗を計算します。負の数を入力すると終了します。\n");
for(;;) /* 無限ループ */
{
printf("Input a number: ");
scanf("%d", &n );
if( n < 0 )
break;
printf("%d! = %d\n", n, fact(n) );
}
}
/* 階乗を計算する関数 */
int fact( int n )
{
/* さーぁ考えよう! */
}
/* end of facti.c */
- 次に、その階乗を計算する関数について考えよう
関数を色々な方法で実現してみよう!
- 1から順番にnまで掛けていく方法(ループ)
- nから順番に1まで掛けていく方法(ループ)
- 帰納的定義に沿って再帰呼び出しを使う方法
$n$個の物から$r$個取り出してを並べる並べ方(順列という)の数は、$_n{\rm P}_r$と書き、
$\displaystyle _n{\rm P}_r=n\times(n-1)\times\cdots\times(n-(r-1))=\frac{n!}{(n-r)!}$
で与えられる。
PはPermutation(順列)のPである。
$n$個の物から$r$個の取り出し方(組み合わせという)の数は、$_n{\rm C}_r$と書き、
$\displaystyle _n{\rm C}_r=\frac{n\times(n-1)\times\cdots\times(n-(r-1))}{r!}=\frac{n!}{(n-r)!\,r!}$
で与えられる。
CはCombination(組合)のCである。
順列・組合を計算する関数を作成する
/* 順列を計算する関数 */
int perm( int n, int r )
{
/* さーぁ考えよう! */
}
/* 組合を計算する関数 */
int comb( int n, int r )
{
/* さーぁ考えよう! */
}
- 適当な入力プログラムを作成し、perm、combを検証せよ!