【问题标题】:Fixed number and fixed rule in iterative process迭代过程中的固定数量和固定规则
【发布时间】: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,那么它们省略了乘积的更大规则,太琐碎了。

合适的固定数量和固定规则是什么?

【问题讨论】:

    标签: scheme sicp


    【解决方案1】:

    在这种情况下,“固定数量”的变量意味着存在有限个变量,在流程开始时预先知道 - 我们只有其中三个:product@987654322 @ 和 max-count。这与递归过程形成对比,递归过程将在堆栈帧中每个过程调用拥有这三个变量的新副本。

    第二点是相关的:“固定规则”是指在过程的递归步骤中我们简单地调用fact-iter,执行之后就没有什么可做的了:也就是说,它在尾部位置。

    【讨论】:

    • ty,明白了。固定规则是2) together with a fixed rule that describes how the state variables should be updated as the process moves from state to state,所以它们是counter+1和counter * product。
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多