首页 > 解决方案 > 迭代过程中的固定数量和固定规则

问题描述

我正在阅读SICP的 1.2 程序及其生成的过程。

计算阶乘的线性迭代过程

(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)))

迭代:
产品<---计数器·产品
计数器<---计数器+1

然后说明:

在每一步,对于任何 =n=,我们只需要跟踪变量 product、counter 和 max-count 的当前值。我们称之为迭代过程。一般来说,迭代过程是这样一个过程,其状态可以通过
1) 固定数量的状态变量,
2) 以及描述在过程从状态移动到状态时如何更新状态变量的固定规则
3) 和一个(可选的)结束测试,它指定进程应该终止的条件。在计算 n! 时,所需的步数随 n 线性增长。这样的过程称为线性迭代过程

参考 1) 固定数量 2) 固定规则和 3) 可选结束测试

当我可以确认那max-count是 3) 可选的结束测试。但我不确定修复号和固定规则。

如果固定数字是counter固定规则product=counter * product,在这种情况下,计数器不是固定的,它是计数器 += 1

如果定数是计数器,而定规则counter + 1

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

标签: schemesicp

解决方案


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

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


推荐阅读