nCrを求める関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yuu

nCrを求める関数

#1

投稿記事 by yuu » 14年前

再帰関数を学んでるのですがこの処理の意味がまったくわかりません
nCrを求めるプログラムの関数なんですけど
なぜこの関数で求められるのでしょうか?


コード:

int fact(int n , int r){
if(r==0 || n==r)
	{
	return 1;
	}
else
	{return fact(n-1,r) + fact(n-1,r-1);
	}
}

box
記事: 2002
登録日時: 15年前

Re: nCrを求める関数

#2

投稿記事 by box » 14年前

yuu さんが書きました: なぜこの関数で求められるのでしょうか?
パスカルの三角形について調べてみると、幸せになれるかもしれません。
ところで、もう少しまともなインデントはできないものでしょうか。
例えば下のように。

コード:

int fact(int n, int r)
{
    if (r==0 || n==r) {
        return 1;
    }
    else {
        return fact(n-1, r) + fact(n-1, r-1);
    }
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: nCrを求める関数

#3

投稿記事 by beatle » 14年前

数学における「組み合わせ」の知識があるかないかですね。
n個のうちr個取る組み合わせの数は、以下の2通りの場合の数を足せば求まります。
  • n-1個のうちr個取って、残り1個は取らない
  • n-1個のうちr-1個取って、残り1個を取る
この2つの場合は排反ですから、2つの場合の数を足していいのです。

閉鎖

“C言語何でも質問掲示板” へ戻る