algorithm - 方案 - 求从 -n 到 n 的分数之和

标签 algorithm sum scheme

所以我必须创建一个名为 frac-sum 的函数,它取从 -n 到 n 的两个函数的分数之和,所以 f(n)/g(n) 作为分数和从 -n 到 n 的和所以 f(-n)/g(-n) + ... f(n)/g(n)

它需要三个形式参数 f g 和 n。

到目前为止,我有这个应该可以工作但最终进入递归循环,这意味着我的基本情况有问题:

    (define (negn n) (- (* n -1) 1))
    (negn 1)

    (define (frac-sum f g n)
      (cond ((= n (negn n)) 0)
            ((= (g n) 0) (+ 0 (frac-sum f g (- n 1))))
            ((+ (/ (f n) (g n)) (frac-sum f g (- n 1))))))

我用它来测试应该输出两个:

(分数和 (lambda (x) (- x 1)) (lambda(x) x) 1)

最佳答案

不存在满足语句n = (n * -1) - 1 的整数n。这是函数无限循环的原因。

由于您要遍历 [-n, n] 范围,您可以在函数中定义两个值,递归地递增下限或递减上限。然后,您可以通过测试下限是否等于上限来终止该函数。

(define (frac-sum f g n)
  (let loop ((neg (- n)) (pos n) (acc 0))
    (cond
      ((= neg pos) acc)
      ((zero? (g neg))
       (loop (add1 neg) pos acc))
      (else
       (loop (add1 neg) pos (+ (/ (f neg) (g neg)) acc))))))

例如:

(frac-sum (lambda (x) (- x 1)) (lambda (x) x) 1)
=> 2

关于algorithm - 方案 - 求从 -n 到 n 的分数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48999718/

相关文章:

google-sheets - 对连续的每个第 n 个单元格进行无限求和

scheme - .vimrc 中 Scheme 的条件选项

scheme - O(n) 中 Racket 中的反向列表

scheme - 带有剩余参数的类型 Racket 中的 Zip 函数

c - 使用 SSE2 指令集查找 3 个值的中位数

algorithm - 实现这种二叉树的最佳方法是什么?

无需明确说明矩阵分量即可求解线性方程组的算法

algorithm - UCB1 算法中的探索常数

javascript - 查找 JavaScript 数组中缺失的数字

MySQL SUM 如果大于和小于