プログラムの手動変換
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/13 14:08 UTC 版)
一般に手続き型言語では、サブルーチン呼び出しのたびにスタックに呼び出し先から戻るための情報を保存する。そのため再帰が深くなりすぎるとスタックオーバーフローでプログラムが異常終了する。 そのような場合、次のようにループに変換して回避する。 { 変換前 }function F (a1:T1, a2:T2, ..., an:Tn) : T0begin P ; return func (b1, b2, ..., bn) ;end ;{ 変換後 }function F (a1:T1, a2:T2, ..., an:Tn) : T0begin loop P ; a1 := b1 ; a2 := b2 ; : an := bn ; end loop ;end ;{Ti は型、P は手続き、bi は値または a1~an に対する副作用を伴わない式である。それ以外の識別子は変数を表すPの中に最低1個のreturn文がないとスタックオーバーフローあるいは無限ループになる。}
※この「プログラムの手動変換」の解説は、「末尾再帰」の解説の一部です。
「プログラムの手動変換」を含む「末尾再帰」の記事については、「末尾再帰」の概要を参照ください。
- プログラムの手動変換のページへのリンク