←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4337

nCrを求める関数
投稿者---glanblue(2005/07/18 11:44:34)


nCrを求める関数で、void combination( int n, int r )を、再帰を用いて作成したいのですが、どのようなソースプログラムにしたらよいでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:nCrを求める関数 4338 REE 2005/07/18 12:06:13


No.4338

Re:nCrを求める関数
投稿者---REE(2005/07/18 12:06:13)


>nCrを求める関数で、void combination( int n, int r )を、再帰を用いて作成したいのですが、どのようなソースプログラムにしたらよいでしょうか?

まず、nCrを求める式を再帰的に表現します。(数学的に)
プログラムにするのは、その後です。


この投稿にコメントする

削除パスワード

No.4339

Re:nCrを求める関数
投稿者---glanblue(2005/07/18 12:25:05)


えーと、nCr = n-1Cr-1 + n-1Crってことですか?



この投稿にコメントする

削除パスワード

No.4340

Re:nCrを求める関数
投稿者---glanblue(2005/07/18 14:05:05)


int型だとできるのですが、voidにするとエラーが・・・本当はvoidでやりたいのですが。どうしたらよいでしょうか?
ちなみに↓はint型です。
#include <stdio.h>
    
int combination(int n, int r)
{
    if( r == 0 || n == r)
		return 1;
	if(r == 1)
		return n;

	return combination(n-1,r-1)+combination(n-1,r);
}
    
int main(void)
{
	int a,b;

	printf("nを入力してください:");
	scanf("%d", &a);
	printf("取り出すrを入力してください:");
	scanf("%d", &b);

	printf("組み合わせは%d通りです.\n",combination(a,b));
    
	return(0);

}




この投稿にコメントする

削除パスワード

No.4341

Re:nCrを求める関数
投稿者---REE(2005/07/18 14:47:54)


>int型だとできるのですが、voidにするとエラーが・・・本当はvoidでやりたいのですが。どうしたらよいでしょうか?

void型にして、どのように計算結果を返すつもりでしょうか?



この投稿にコメントする

削除パスワード

No.4342

Re:nCrを求める関数
投稿者---かずま(2005/07/18 17:36:10)


> int型だとできるのですが、voidにするとエラーが・・・
> 本当はvoidでやりたいのですが。どうしたらよいでしょうか?
#include <stdio.h>

#define N  33

int c[N+1][N+1];

void combination(int n, int r)
{
    if (c[n][r] == 0) {
        if (r == 0 || n == r)
            c[n][r] = 1;
        else if (r == 1)
            c[n][r] = n;
        else {
            combination(n-1, r-1);
            combination(n-1, r);
            c[n][r] = c[n-1][r-1] + c[n-1][r];
        }
    }
}
    
int main(void)
{
    int n, r;

    for (;;) {
        printf("nを入力してください:");
        if (scanf("%d", &n) != 1 || n > N || n < 0) break;
        printf("取り出すrを入力してください:");
        if (scanf("%d", &r) != 1 || r > n || r < 0) break;
        combination(n, r);
        printf("組み合わせは %d通りです.\n", c[n][r]);
    }
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity