PostScript TUTORIAL and COOKBOOKの70ページ。70 Chapter 7: LOOPS AND CONDITIONALS に再帰で階乗計算の結果を印刷するサンプルがあります。その階乗計算の部分。
/factorial %stack: n --- n! (after) { dup 1 gt {dup 1 sub factorial mul} if } def
print、pstackはスタックに影響を与えませんので、どこに何個入れても問題ありません。
factorialにprint、pstackを入れまくって階乗計算の様子をみてみます。
GS>/factorial {(=factorial\n) print dup 1 gt (==dup 1 gt\n) print pstack {dup 1 sub (==dup 1 sub\n) print pstack factorial mul (==mul\n) print pstack } if } def GS>5 factorial =factorial ==dup 1 gt true % 5 から複製され 1より大きいかどうかの論理演算結果 5 % 最初に積まれた 5 ==dup 1 sub 4 % 5 から複製され 1引くかれた値。 5 % 再帰が一段深くなる(インデントは手作業による) =factorial ==dup 1 gt true 4 5 ==dup 1 sub 3 4 5 =factorial ==dup 1 gt true 3 4 5 ==dup 1 sub 2 3 4 5 =factorial ==dup 1 gt true 2 3 4 5 ==dup 1 sub 1 2 3 4 5 =factorial ==dup 1 gt false 1 2 3 4 5 ==mul 2 % 1と2を乗算した結果 3 4 5 ==mul 6 % 2と3を乗算した結果 4 5 ==mul 24 % 6と4を乗算した結果 5 ==mul 120 % 24と5を乗算した結果 GS<1>== 120 GS>