【发布时间】:2019-02-10 09:54:45
【问题描述】:
通读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。
【问题讨论】:
-
从来不知道蒸馏版,谢谢!
标签: recursion clojure tail-recursion sicp