回答編集履歴

2

微修正

2020/02/02 01:10

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -35,10 +35,6 @@
35
35
  long int C_count;
36
36
 
37
37
  long int C(int n, int m);
38
-
39
-
40
-
41
- int calls; /* 呼び出し回数 */
42
38
 
43
39
 
44
40
 

1

追記

2020/02/02 01:10

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -19,3 +19,111 @@
19
19
  であるなら、コマンドラインから与える3つのうち2つは要らないことになります。
20
20
 
21
21
  nはともかく、mとcの意味が不明です。
22
+
23
+
24
+
25
+ ```C
26
+
27
+ /* comb.c */
28
+
29
+ #include <stdio.h>
30
+
31
+ #include <stdlib.h>
32
+
33
+
34
+
35
+ long int C_count;
36
+
37
+ long int C(int n, int m);
38
+
39
+
40
+
41
+ int calls; /* 呼び出し回数 */
42
+
43
+
44
+
45
+ int main(int argc, char *argv[]) {
46
+
47
+ long int n = atoi(argv[1]);
48
+
49
+
50
+
51
+ for ( long int m = 0; m <= n; ++m ) {
52
+
53
+ C_count = 0; /* 呼び出し回数を0に */
54
+
55
+ int result = C(n,m);
56
+
57
+ printf("C(%ld,%ld)=%ld[%ld times]\n",n,m,result, C_count);
58
+
59
+ }
60
+
61
+ return 0;
62
+
63
+ }
64
+
65
+
66
+
67
+ long int C(int n, int m){
68
+
69
+ ++C_count; /* ここで呼び出し回数を+1 */
70
+
71
+ if( m==0 ) return 1;
72
+
73
+ if( m==n ) return 1;
74
+
75
+ return C(n-1,m)+C(n-1,m-1);
76
+
77
+ }
78
+
79
+ ```
80
+
81
+
82
+
83
+ 入力値はnひとつだけの上記コードで以下の結果を得ました。
84
+
85
+
86
+
87
+ ```
88
+
89
+ D:\work>cl comb.c
90
+
91
+ Microsoft(R) C/C++ Optimizing Compiler Version 19.24.28314 for x64
92
+
93
+ Copyright (C) Microsoft Corporation. All rights reserved.
94
+
95
+
96
+
97
+ comb.c
98
+
99
+ Microsoft (R) Incremental Linker Version 14.24.28314.0
100
+
101
+ Copyright (C) Microsoft Corporation. All rights reserved.
102
+
103
+
104
+
105
+ /out:comb.exe
106
+
107
+ comb.obj
108
+
109
+
110
+
111
+ D:\work>comb 3
112
+
113
+ C(3,0)=1[1 times]
114
+
115
+ C(3,1)=3[5 times]
116
+
117
+ C(3,2)=3[5 times]
118
+
119
+ C(3,3)=1[1 times]
120
+
121
+ ```
122
+
123
+
124
+
125
+ ---
126
+
127
+ C(n,m) が nCm を求めているのなら、C(3,0) は m=0 なのでただちに結果1 が求まります。
128
+
129
+ なので [2 times] ではなく [1 times] ではなかろうかと。