末尾再帰(まつびさいき)とは、再帰的な関数やプロシージャにおいて、自身の再帰呼び出しが、その計算における最後のステップになっているような再帰のパターンのことである[1]。再帰にかかわらず一般に、そのような最後の呼び出しを末尾呼び出し[注釈 1]という。呼び出しではなく、戻り先を保存しない飛び越し命令(いわゆる「GOTO文」)にコンパイラ最適化できるという特徴がある(#末尾呼出し最適化)[1]。 手続き型言語と末尾再帰[編集] C言語のような言語では、言語処理系による自動的な末尾呼び出しへの変換やその最適化(末尾最適化)は難しい。自己再帰を注意して書けば、最適化によりループにできるコンパイラもある、という程度である。 プログラムの手動変換[編集] 一般に再帰呼び出しが可能な言語では、サブルーチン呼び出しのたびにスタックに呼び出し先から戻るための情報を保存する。そのため再帰が深くなりすぎるとス