質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

long int 呼び出し

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 695
退会済みユーザー

退会済みユーザー

組合せの数(2項係数)を計算する関数  

long int C(int n, int m)  

を再帰呼出しで関数定義した場合に、与えられた非負整数 n、m を引数とする呼出し C(n,m) 対して関数 C が呼び出される回数を数え、組合せの数の値とその呼出し回数を標準出力に書き出すプログラムを作りたい。  

プログラムの仕様はつぎの通りです。  

非負整数 n、m はコマンドラインに与えられる。  
出力は、つぎの形式の1行として書き出すこと。    
u [ c times]  
u は組合せの数の値、 c はその呼出し回数  
u と [ の間、c と times の間には、それぞれ空白1文字をおくこと。  

■実行例  
コマンドライン入力  

0 0  

標準出力  

1 [1 times]  

コマンドライン入力  

3 2  

標準出力  

3 [5 times]  

コマンドライン入力  

10 8  

標準出力  

45 [89 times]  

#include <stdio.h>
#include <stdlib.h>  
long int C_count;  
long int C(int n, int m);  


int main(int argc, char *argv[]){  

   ・・・コマンドラインから n, m を読み取り  
   ・・・C(n,m) の値と、呼出し回数を書き出す  

   return 0;  
}  

long int C(int n, int m){  

   if( m==0 ) return 1;  
   if( m==n ) return 1;  
   return C(n-1,m)+C(n-1,m-1);  
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2020/01/24 23:59

    自分なりにコードを書きましょう

    キャンセル

  • 退会済みユーザー

    2020/01/29 03:13

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

0

プログラムの仕様ではnとmの上限が定められておらず、intの最大値を超えた場合に関数long int C(int n, int m)で計算することはできません。多倍長整数を使って書き直してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

...こんなんでいい?

#include <stdio.h>
#include <stdlib.h>

long int C_count;
long int C(int n, int m);

int calls; /* 呼び出し回数 */

int main(int argc, char *argv[]){
    calls = 0; /* 呼び出し回数を0に */
    int result = C(10,2);
    printf("%d %d\n", result, calls);
    return 0;
}

long int C(int n, int m){
    ++calls; /* ここで呼び出し回数を+1 */
    if( m==0 ) return 1;
    if( m==n ) return 1;
    return C(n-1,m)+C(n-1,m-1);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/28 10:13

    rubato6809さん
    epistemeさん
    少々熱くなってしまいました失礼しました。
    再度考えてみようと思います。

    kainaさん
    質問に対する回答以外は控えて下さい。
    何のコメントかよく分かりませんが、あなたの感想文を書く場では無いですよ?笑
    まぁ、よっぽど暇な人かな?

    キャンセル

  • 2020/01/28 19:54

    ↑後半部、まったく同じセリフをあなたに返そう。

    キャンセル

  • 2020/01/28 20:20

    お忙しい(笑)中揚げ足取りご苦労様です。
    質問と関係の無いコメントはして頂けるのですね 笑

    今後は二度とコメントしないで下さい。心底迷惑

    rubato6809さんのヒントを参考に考えるので邪魔しないでね。

    キャンセル

check解決した方法

-4

解決することができました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/29 23:10

    どう解決したのか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る