(define (fact n)
(if (> n 1)
(* n (fact (- n 1)))
1))
先程も解説したように、このプログラムでは、
(fact 5) を計算しようとし、
(fact 4) が必要となり、、、、 (fact 1) = 1 がもとまり、
それを (fact 2) の計算に返し、 (fact 2) = 2 * (fact 1) を実行し、
、、、、 (fact 5) = 5 * (fact 4) と計算が進んでいきます。
このように再帰を実行するために、深い呼び出し関係を生成しています。
int fact(n) {
int result = 1;
int i;
for (i = 1; i <= n; i++) {
result = i * result;
}
return result;
}
これは、繰り返し文を用いて result という値に、
1, ..., n を掛け合わせていくことによって値を得るものです。
99.9.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp