前提・実現したいこと
動的計画法を使用した再帰呼び出しで関数定義した時のプログラムについて下記の
出力結果を得られるようにしたいのですが自分なりに大枠は作れた気がしていますが細かな繋ぎ方
などがよく分かりません。特にint n = atoi(argv[1]);の所から正しいのか教えて頂きたく
コマンドライン
3 0 3
出力
C(3,0)=1 [2 times]
C(3,1)=3 [6 times]
C(3,2)=3 [6 times]
C(3,3)=1 [2 times]
c
1#include <stdio.h> 2#include <stdlib.h> 3 4long int C_count; 5long int C(int n, int m); 6int none; 7// 二項係数 nCm を計算して返す 8 9int main(int argc, char *argv[]){ 10 11// n番目(n>=0)のフィボナッチ数を返す 12 13//ここから 14int n = atoi(argv[1]); 15int m = atoi(argv[2]); 16int c = atoi(argv[2]); 17printf("C(%d,%d)=%d[%d times]",n,m,c); 18//ここまでも自信ありません 19 20 return 0; 21} 22 23long int C_(int n, int m, 24 long int *c[]){ 25 C_count++; 26 if( c[n][m]!=none ) return c[n][m]; 27 if( m==0 ) return c[n][m]= 1; 28 if( m==n ) return c[n][m]= 1; 29 return c[n][m]= C_(n-1,m,c)+C_(n-1,m-1,c); 30}
###追記
組合せの数(2項係数)を計算する関数 long int C(int n, int m)を
動的計画法を適用した再帰呼出しで関数定義した場合に、与えられた非負整数 n、m を引数とする呼出し C(n,m) 対して関数 C が呼び出される回数を数え、2項係数の値とその呼出し回数を標準出力に書き出すプログラムを作ろうとしています。