【问题标题】:Writing a recursive procedure in Scheme. (sum-by-halves a b)在 Scheme 中编写递归过程。 (减半 a b)
【发布时间】:2013-10-20 15:05:37
【问题描述】:

对从 a 到 b 的整数求和的一种方法是将区间分成两半,递归地将两半相加,然后将两个和相加。如果区间有奇数个整数,则尽可能将其分成两半。您可以使用floor 函数返回小于某个实际值的最大整数。

(define sum-by-halves (lambda (a b) your_code_here))

有人有办法解决这个问题吗?

【问题讨论】:

  • “要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期的结果。另请参阅:Stack Overflow question checklist。您刚刚逐字复制了您的作业。这不好玩。尝试自己解决,这很有趣。显示任何尝试,通过编辑您的问题发布一些代码。不遵循 SO 指南的问题可以关闭。
  • @WillNess 不仅如此,这不是 OP 这样问的第一个问题。见DrRacket procedure body help (boolean-odd? x)。 Deniz:Stack Overflow 不是家庭作业解决方案工厂。要求代码的问题需要证明您已经尝试过某事并且遇到了问题。没有提交编程作业的解决方案不算作编程问题。这个“问题”主要是一组指令。至于“有没有人想办法解决这个问题?”我希望答案是“是的”。
  • 你知道因为发布“坏”问题而被禁止在 SO 上提问的可能性吗?当心,这样可能是无情的。

标签: scheme racket


【解决方案1】:

如果您要递归解决问题,那么您需要 i) 确定停止条件,并且 ii) 弄清楚如何将较大的问题分解为相同但较小的问题。你已经有了'ii'(除了细节)。 “我”会是什么?

停止条件是当两个数字“a”和“b”相同时。所以,你的出发点是:

(define (sum-by-halves a b)
  (if (= a b)
      a
      ...))

对于“...”,您需要在“a”和“b”之间的“c”。

(define (sum-by-halves a b)
  (if (= a b)
      a
      (let ((c (div (+ a b) 2)))
        (+ (sum-by-halves a c)
           (sum-by-halves (+ c 1) b)))))

通过选择div,我确保c 始终是一个整数,并且是一半或比一半少一。因此(+ c 1) 不会超过b。注意:代码假定(<= a b)

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多