こんにちは<_ _>
nCrを求める問題について質問です
(n個の中からr個を選ぶ組み合わせの数nCrを求めるという問題です)
ここで漸化式というものを用いよとあり、サイトなどで漸化式について
感覚的な理解はつかめましたが、「プログラムで組め」となると完全にお手上げです;;
漸化式の詳しい解説用法とプログラム(ヒントなどでもいいのでお願いします<_ _>)をお願いします
#include<stdio.h>
long combi(int,int);
int main(void)
{
int n,r;
for(n=0;n<=5;n++){
for(r=0;r<=n;r++)
printf("%dC%d=%ld ",n,r,combi(n,r));
printf("\n");
}
return 0;
}
long combi(int n,int r)
{
long p=1;
処理
return p;
}
外郭まではソースで指示がありますが処理がまったくわかりません
どうかよろしくお願いします<_ _>
No.4ベストアンサー
- 回答日時:
>漸化式について色々調べてみましたがまだ大体の機能・・・みたいな
>ものしか解らず、詳しい使用法などまだ理解が不足しております。
最初の回答の例で言うと、
a(n+1) = 2*a(n) + 1 のように、n+1 番目の項をそれより手前の n 番目の項で定義するのが漸化式。いろんなバリエーションがあるけど説明省略。
当然、「最初の項」が必要で、例えば a(0) = 0 とすると
a(1) = 2*a(0)+1 = 1
a(2) = 2*a(1)+1 = 3
a(3) = 2*a(2)+1 = 7
...
と「すべてのa(n)」が定義できます。
プログラムで同じことをする場合には、これをそのまま書けば
int func_a(int n) {
if ( n <= 0 ) {
return 0;
} else {
return 2*func_a(n-1)+1;
}
}
とかすれば、func_a(3) を計算する時に、func_a(2) -> func_a(1) -> func_a(0) が順に呼出されて、
func_a(0)で 0 が返ってくるので、
func_a(1) で 2*0+1 が戻され、
func_a(2) で 2*(2*0+1)+1 が戻され、
最終的に 2*(2*(2*0+1)+1)+1 が呼出し側に戻ってきます。
No.5
- 回答日時:
nCr の漸化式については、既に、No.2 の方の回答にありますが、これは、こういう意味です。
1)n 個の中から r 個選ぶ選び方の数を知りたい
2)でも、計算方法がわからない
3)簡単なケースならわかる
・n 個のなかから、1個取り出す組み合わせは、n
・n 個のなかから、n個取り出す組み合わせは、1
※全部を取り出すという1つの方法があるから。
4)複雑なケースを単純なケースに分解してみよう
・n 個のなかから、r 個取り出す方法を考える
・まず、n 個を n - 1 個と、1 個に分けてみる
・n - 1 個なかから、r 個取り出す方法を考えてみよう
あ、これは、(n - 1)Cr だから、あとで計算してみよう
※できたことにしておこう
・このままだと、別にしておいた1個を無視することになる。
この1個をどうしようか
・n - 1 個の中から、r - 1個取り出して、これに、残った1個を
足すと、n 個のなかから、(残った1個を含めて)r個とった
ことになる。
あ、これは、(n - 1)C(r - 1) のことだ
これも計算できたことにしよう
というわけで、全体では、
nCr = (n - 1)Cr + (n - 1)C(r - 1) となります。
ただ、単純にこの計算をすると終わらないので、計算を終える条件が必要です。
それが、
nC1 = n と nCn = 1 になります。
これを式にしたのが漸化式です。
漸化式というのは、ひとつ隣(n → n - 1 や、r → r - 1)との関係がわかれば、なぜか計算できてしまうという魔法のようなものです。
その分、計算の経過を全部追いかけるのは大変ですが。
No.3
- 回答日時:
>漸化式の定義そのままです。
>これのどこがわからなかったのですか?
メインのループで C(0, 2) を呼んでるから、そこでクラッシュとか。
早速の回答ありがとうございました<_ _>
漸化式とう言葉を今日始めて目にしたのでまだ理解に不足している
ところがありまして・・・失礼な質問でしたらすいません><
漸化式について色々調べてみましたがまだ大体の機能・・・みたいな
ものしか解らず、詳しい使用法などまだ理解が不足しております。
(数学に関する知識は乏しいです)
プログラムになるとそれをどう組めばいいのか解りませんでした・・・
No.2
- 回答日時:
int C(int n, int r) {
if ( r == 1 ) return n; // C(n,1) = n
if ( n == r ) return 1; // C(n,n) = 1
return C(n-1,r) + C(n-1,r-1);
}
漸化式の定義そのままです。
これのどこがわからなかったのですか?
No.1
- 回答日時:
>ここで漸化式というものを用いよとあり、
漸化式が何かは OK ?
a(n+1) = 2*a(n) + 1
みたいなアレね。
n_C_r を n_C_(r-1) で表わして n_C_0 まで降下するのが簡単かな。
他にもパスカルの三角形を使ってもいいし。お好きなものでどうぞ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
迷路を脱出する経路探索プログ...
-
組織的ディザ法のプログラムが...
-
C言語で%を使わない余りの出し方
-
c言語プログラミングについて f...
-
C言語で簡単なパックマンゲーム...
-
3のつく数と3の倍数を表示 C言語
-
2の補数を計算するプログラム
-
C++で表を作成したいのです ...
-
2次関数プログラムを描写する...
-
whileとifを使い偶数を出すには
-
opencvとmbedのシリアル通信で...
-
プログラミングに関して
-
画像の拡大・縮小
-
ヌメロンのプログラム
-
異なるn個の整数からr個の整数...
-
条件が多い場合
-
| (or) を使った関数の引数の作...
-
nCrの計算
-
Segmentation fault その2
-
C言語プログラミング 漸化式に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報