有一个代码:
(define (factorial a)
(define (iter b c)
(if (> b a) c
(iter (* b c)
(+ b 1))
(iter 1 1)
我有一些问题:
- 当
b
在n次迭代后变得大于a
时,函数停止 - 如果是这样的话,函数必须取值
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的自变量按另一顺序排列。
是的。每次
b
递增1的递归调用,因此它将在a
迭代后停止。当你呼叫时
(iter (+ b 1) (* b c))
CCD_ 11在递归调用中转到CCD_。因此,每次递归都会将c
乘以b
的当前值。由于我们每次在b
上加1,这导致了1 * 2 * 3 * 4 ...
的乘积,这就是阶乘的定义。