You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:25:24