teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/04/25 04:07

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -21,6 +21,11 @@
21
21
 
22
22
  再帰を利用する上ではよくあるミスです。何か警告が出ているのでは無いでしょうか。
23
23
 
24
+ ---
25
+ あと、細かいようですが、誰も指摘していないので。
26
+ - **誤**: ASCⅡコード
27
+ - **正**: ASCIIコード ([Wikipedia](https://ja.wikipedia.org/wiki/ASCII))
28
+
24
29
  参考
25
30
  ---
26
31
  階乗の計算を題材に実験してみます。

1

追記

2019/04/25 04:07

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -19,4 +19,73 @@
19
19
  ...
20
20
  ```
21
21
 
22
- 再帰を利用する上ではよくあるミスです。何か警告が出ているのでは無いでしょうか。
22
+ 再帰を利用する上ではよくあるミスです。何か警告が出ているのでは無いでしょうか。
23
+
24
+ 参考
25
+ ---
26
+ 階乗の計算を題材に実験してみます。
27
+
28
+ ######期待通りに動いている例
29
+ ```C
30
+ #include <stdio.h>
31
+
32
+ int fractional(int n) {
33
+ if(n == 0) {
34
+ return 1;
35
+ }
36
+
37
+ return n * fractional(n-1);
38
+ }
39
+
40
+ int main(void) {
41
+ int num = 10;
42
+ printf("%d! = %d\n", num, fractional(num));
43
+
44
+ return 0;
45
+ }
46
+ ```
47
+
48
+ **標準出力** [Wandbox](https://wandbox.org/permlink/KQdCUE2gimZQovTh)
49
+ ```
50
+ 10! = 3628800
51
+ ```
52
+
53
+ ######期待通りに動かない例
54
+ ```C
55
+ #include <stdio.h>
56
+
57
+ int fractional(int n) {
58
+ if(n == 0) {
59
+ return 1;
60
+ }
61
+
62
+ //return n * fractional(n-1);
63
+ n * fractional(n-1);
64
+ }
65
+
66
+ int main(void) {
67
+ int num = 10;
68
+ printf("%d! = %d\n", num, fractional(num));
69
+
70
+ return 0;
71
+ }
72
+ ```
73
+
74
+ **標準出力/標準エラー出力** [Wandbox](https://wandbox.org/permlink/Oap8hjZsULlnhYqd)
75
+ ```
76
+ prog.c: In function 'fractional':
77
+ prog.c:9:7: warning: value computed is not used [-Wunused-value]
78
+ n * fractional(n-1);
79
+ ~~^~~~~~~~~~~~~~~~~
80
+ prog.c:10:1: warning: control reaches end of non-void function [-Wreturn-type]
81
+ }
82
+ ^
83
+ 10! = 1
84
+ ```
85
+
86
+ - **-Wunused-value**
87
+ 値が使われていないけど、良いの?という警告です。
88
+ - **-Wreturn-type**
89
+ 返り値が無いけど、良いの?という警告です。
90
+
91
+ 本当は返されていない返り値を無理矢理使っていることになり、未定義の動作を踏んでいます。