畑です。早速のフォローありがとうございます。

久野さん wrote:
>>ただ、この場合の両者の違いとして、while ループは外側に関数(ループ内の
>>ルーチン)の呼出が並べられて展開されるが、再帰呼出は内側に入れ子状に関数
>>の呼出が展開される、というようなイメージでいいのでしょうか?
> 
>   それは何の話? 計算モデル? 実装?
> 
>   計算モデル的には「埋め込まれる」と考えてもいいんでしょうけど、
> 実装上は関数は「戻り番地と引数をスタックに積んでジャンプし、内部
> を実行し、戻る時はスタックから戻り番地を取り降ろして戻る」という
> 形になります。

大変そう──というのは実装上の話ということになると思います。

>>処理系(ちなみに自分が親しんでいる言語は Perl です)によって違いがあるの
>>かもしれませんが、同じことをやるのなら、while ループの方が効率は良さそう
>>な気がします(それに再帰の場合はコンパイラ側のスタック(?)の管理が大変
>>そうに思える)が、実際のところどうなのでしょう?
> 
>   別に大変じゃないです。単にそういうコード出せばいいだけだから。

メモリ空間的に while よりも再帰の方が圧迫しやすくはないでしょうか?

お代官様 wrote:
>>> P.S. そして最適化によってスタックを使わずにwhileと同等に計算する
>>>      ようなコンパイラもあると思う。
> 
> 最近の(っていっても、20年くらい前から?)lispはtail recursionはloopに最
> 適化される事が多いですよね。

なるほど、どういうものなんですね。

-- 
Masanori HATA