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

回答編集履歴

1

最後をちょっと追記

2018/01/16 13:28

投稿

raccy
raccy

スコア21807

answer CHANGED
@@ -36,4 +36,6 @@
36
36
  double woris(double i) { return woris_tail(i, 1.0); }
37
37
  ```
38
38
 
39
- コンパイラは賢いため、他のパターンでも末尾再帰とみなされる場合があります。ただ、確実に末尾再帰の最適化が反映されるようにしたい場合は、最後の`return`文がその関数の呼出しのみになるような形にしてください。
39
+ コンパイラは賢いため、他のパターンでも末尾再帰とみなされる場合があります。ただ、確実に末尾再帰の最適化が反映されるようにしたい場合は、最後の`return`文がその関数の呼出しのみになるような形にしてください。
40
+
41
+ なお、末尾再帰最適化はC言語の必須要件ではありません。最適化を無効にしている場合、十分な最適化ができないコンパイラを使っている場合等は、末尾再帰にしてもスタックが消費させる形でコンパイルされますので、ご注意ください。GCCであれば-O2以上の最適化をすれば問題ありません。