如何在Scheme中编写迭代式乘法函数(iter-multiply a b)?
Scheme迭代式乘法函数
iter-multiply实现 递归版本的乘法通过不断展开调用栈累积结果,而迭代式实现利用尾递归(Scheme会将尾递归优化为循环执行,避免栈溢出),通过累加器保存中间结果。
基础迭代实现(仅支持非负整数b)
(define (iter-multiply a b) ; 辅助尾递归函数:accumulator 存储当前累积结果,count 剩余需要累加的次数 (define (iter accumulator count) (if (= count 0) accumulator (iter (+ accumulator a) (- count 1)))) ; 初始调用:从0开始累加,共执行b次 (iter 0 b))
执行逻辑示例
调用(iter-multiply 3 4)的步骤:
- 初始:
(iter 0 4) - 第一次迭代:
(iter (+ 0 3) 3)→(iter 3 3) - 第二次迭代:
(iter (+ 3 3) 2)→(iter 6 2) - 第三次迭代:
(iter (+ 6 3) 1)→(iter 9 1) - 第四次迭代:
(iter (+ 9 3) 0)→(iter 12 0),此时count为0,返回12
支持负数的增强版本
如果需要处理b为负数的情况,只需先计算绝对值的乘积再取反:
(define (iter-multiply a b) (define (iter accumulator count) (if (= count 0) accumulator (iter (+ accumulator a) (- count 1)))) (if (< b 0) (- (iter 0 (- b))) ; b为负时,计算a与|b|的乘积后取反 (iter 0 b)))
测试示例:(iter-multiply 3 -4)返回-12,(iter-multiply -2 5)返回-10
内容的提问来源于stack exchange,提问作者LordCoeCoe
相关产品推荐
相关产品推荐

