函数在哪里获取值



有一个代码:

(define (factorial a)
(define (iter  b c)
(if (> b a) c
(iter (* b c)
(+ b 1))
(iter 1 1)

我有一些问题:

  1. b在n次迭代后变得大于a时,函数停止
  2. 如果是这样的话,函数必须取值c(因为if (> b a) c),对我来说,代码中似乎真的没有对c的操作,所以它必须显示我们在开始时给出的参数?或者值(* b c)c(确实如此(,但为什么

代码应该是:

(define (factorial a)
(define (iter  b c)
(if (> b a) c
(iter (+ b 1)
(* b c))
(iter 1 1))

其中CCD_ 8的自变量按另一顺序排列。

  1. 是的。每次b递增1的递归调用,因此它将在a迭代后停止。

  2. 当你呼叫时

(iter (+ b 1) (* b c))

CCD_ 11在递归调用中转到CCD_。因此,每次递归都会将c乘以b的当前值。由于我们每次在b上加1,这导致了1 * 2 * 3 * 4 ...的乘积,这就是阶乘的定义。

相关内容

最新更新