PostScriptで再帰が出来るのだからとフィボナッチ数列を計算してみました。
%! /fib { dup 0 eq { pop 1} {dup 1 eq { pop 1 } { dup 1 sub fib exch 2 sub fib add } ifelse }ifelse } def 0 1 20 {fib ==} for
- else へ値を渡すのには dup によりスタックの値をコピーしなかればまりません。
- けれども論理地がtrueであってifのブロックで値を返すときは、{ pop 1}のようにコピーした値を捨ててから返します。そうしないと再帰したときにスタックの値がずれます。clear でスタックを空っぽにしてもダメ。
- { dup 1 sub fib exch 2 sub fib add } このへんは手続きを一つ追加するたびに pstack でスタックの内容を確認しながらの作業です。
$ ps2pdf fib.ps 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946