【问题标题】:Recursive Multiplication in Scheme (trouble with negatives)Scheme中的递归乘法(负数问题)
【发布时间】:2018-09-29 08:30:09
【问题描述】:

我正在尝试使用递归在 Scheme 中进行乘法运算,我可以使用正数而不是负数(它们陷入无限循环)。我假设问题出现在第 3 行和第 4 行,我写这些是为了能够处理负面影响。任何帮助将不胜感激:)

(define Multiply(lambda (x y)
                      (if (eq? x 0) 0 (if (eq? y 0) 0 ;if either x or y are zero, return 0
                         (if (> 0 x) (- 0 (+ x (Multiply x (- y 1)))) 
                             (if (> 0 y) (- 0 (+ x (Multiply x (- y 1))))
                                 (+ x (Multiply x (- y 1)))))))))

【问题讨论】:

    标签: recursion functional-programming scheme racket


    【解决方案1】:

    由于乘法是结合的,你可以有

    x * (-1 * y)  =  (x * -1) * y
    

    考虑到这一点,只要将y 小于零,您就可以将xy-1 相乘,从而将其转换为正数。 考虑以下几点:

    (define (multiply x y)
      (cond
        ((zero? x) 0)
        ((zero? y) 0)
        ((< y 0)
         (multiply (- x) (- y)))
        (else
         (+ x (multiply x (sub1 y))))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多