阅读 SICP Distilled,并试图理解迭代和递归过程的区别。给出了以下示例:
(defn + [a b]
(if (= a 0) b (inc (+ (dec a) b))))
(defn + [a b]
(if (= a 0) b (+ (dec a) (inc b))))
这些中哪一种是迭代过程(状态完全由迭代函数的参数维护),哪一种是递归过程(状态必须在“幕后”保留,同时等待前面的函数调用完成)。
我猜第二个是迭代的,因为参数可以在应用于函数之前进行评估,而前者将不得不将连续的函数调用保持在堆栈上等待最后一个“+”操作完成,然后才能展开堆栈,在每个步骤中运行“inc”。