「C言語/中級者向けの話題」の版間の差分

削除された内容 追加された内容
関数のフリースタンディングなど、 引用元『C言語/関数』2018年7月7日 (土) 07:41‎ から、こちらに移動。どう考えても、初心者向けではない内容なので。
再帰のスタック・オーバーフロー
293 行
 
==== 再帰 ====
再帰(さいき)とは、ある関数がその関数自身を呼び出すことである。
 
典型的な用途として、数学の階乗(5×4×3×2×1のような計算)などが、よくあげられる。
 
再帰に向いた計算に再帰を使うと、ソースコードを簡潔に書ける場合がある。
 
ただし、再帰ではハードウェア資源的には弱点があり、スタックのためにメモリを多く占有するので負担になるという弱点もある。そのため、再帰で桁数の多すぎる計算などをすると、与えられたスタック領域を使いはたてしまうと異常終了などのエラーを引きおこす場合もある。これは、いわゆる「スタック・オーバーフロー」(stack overflow)というエラーの一種である。
 
再帰では、
ある関数がその関数自身を呼び出すたびに、
引数と制御が戻るべきアドレス(リターンアドレス)が、
スタックと呼ばれる領域に格納される(プッシュ)。
 
また、ローカル変数もスタックと呼ばれる領域に格納されている。
関数の処理が終わるたびに、
304 ⟶ 311行目:
関数を呼び出したときの状態を復元し、
処理を続ける。<ref>矢沢久雄、原田英生『日経 BP パソコンベストムック C言語とC++がわかる本』日経ソフトウェア、2013年5月15日発行、112項</ref>
 
 
再帰を行うには、その関数がリエントラントである必要がある。