掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板2

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

No.26209

C言語
投稿者---とし(2006/02/20 11:21:07)


今問題を解いてますが以下まで出来てるんですがどうしてもできない処理があるので教えてください。
nに0、rにー1を入力すると何も結果が返ってきません。
なぜでしょうか??
/*
*/

/*階乗値を返す*/
#include<stdio.h>

int fact(int n)
{
if(n > 0)
return(n * (n - 1));

else
return(1);
}

/*組み合わせを求める関数*/
int combination(int n,int r)
{
int wk;

if(r == 0 || n == r)
return 1;
if(r == 1)
return n;
if(n < r)
return 0;

wk = combination(n - 1,r - 1) + combination(n - 1,r);

return ( wk );
}

int main(void)
{
int n1,r1;

printf("整数を入力してください。");
scanf("%d",&n1);
printf("整数をいくつ取り出しますか?");
scanf("%d",&r1);
if(n1 > r1)
printf("組み合わせは%d通りである。\n",combination(n1,r1));
if(n1 < r1)
     printf("nよりrの値が大きくなってはいけません。");
if(n1 == r1)
     printf("nとrを同じ値で入力してはいけません。");


return(0);
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:C言語 26215 iijima 2006/02/20 12:17:15


No.26215

Re:C言語
投稿者---iijima(2006/02/20 12:17:15)


>nに0、rにー1を入力すると何も結果が返ってきません。

n=0, r=-1 としてconbination関数を呼び出すと、いつまでも再帰が終了せず、いずれはメモリがオーバーフローして異常終了します。
それが、見た目として「何も結果が返らない」と見えたのだと思います。
combination関数の再帰呼び出しごとに、関数引数に与えられたn,rの値がどう変化するかを追いかけて確認してください。

# そもそも「0個の数から-1個を選ぶ組み合わせ数」はあり得ない処理です。
# このようなあり得ない処理は受け付けず、エラーメッセージを出すようにするのが良いでしょう。
#
# 掲示板利用宣言の各事項を遵守してください。


この投稿にコメントする

削除パスワード

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