计算n!
递归:
(define (factorial n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
循环:
(define (factorial n)
(fact-iter 1 1 n))
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
递归形成了一个计算链,计算过程先膨胀再收缩,解释器需要记住所有计算步骤的上下文
循环不会膨胀,计算上下文只和当前的参数相关