SICP 1.9 这部分内容主要描述了递规和迭代的区别,很有意思。虽然形式上它们都是以递规函数的形式出现但是在思想上却大不相同, 递规的效率也比迭代差很多,而通常高级语言中递规函数是无法实现迭代的功能的(scheme为什么能实现以后才介绍) ,而是靠循环来实现迭代。
递规和迭代的重要区别就是,当它们在运行过程中被中止的时候,迭代仅仅依靠函数的参数就可以恢复执行,而递规则需要程序运行中的一些其他状态来恢复执行。
而且从递规函数的定义上可以看出
(define (factorial n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
(define (+ a b)
(if (= a 0)
b
(inc (+ (dec a) b))))
其一般形式如下,
(define (f x)
if (p)
e
(g (f x)))
可以看出返回结果不是(f x)的形式,往往(f x)被包含在另外的函数中
而迭代则往往返回结果也是(f x)的实现只不过参数变了
(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)
max-count)))
(define (+ a b)
(if (= a 0)
b
(+ (dec a) (inc b))))
而且如我在习题1.6中指出递规函数都是以sepecial form的形式出现的。
