【发布时间】:2019-12-09 02:35:48
【问题描述】:
我正在阅读 SICP 的1.2 Procedures and the Processes They Generate。
计算阶乘的线性迭代过程
(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)))
迭代:
产品
计数器
然后说明:
在每一步,对于任何 =n=,我们只需要跟踪 变量 product、counter 和 max-count 的当前值。我们 将此称为迭代过程。一般来说,一个迭代过程是 其状态可以通过
1)固定数量的状态 变量,
2)连同描述如何 状态变量应该随着过程从状态移动到 状态
3) 和指定条件的(可选)结束测试 进程应在其下终止。在计算 n! 时, 所需的步数随 n 线性增长。这样的过程是 称为线性迭代过程。
参考 1) 固定数 2) 固定规则 3) 可选结束测试
当我可以确认 max-count 是 3) 可选的结束测试。但我不确定修复号和固定规则。
如果固定数字是counter,那么固定规则是product=counter * product,这种情况下,计数器不是固定的,它是计数器+= 1
如果固定数是计数器,固定规则是counter + 1,那么它们省略了乘积的更大规则,太琐碎了。
合适的固定数量和固定规则是什么?
【问题讨论】: