所以我必须创建一个名为 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/