方案(球拍)正确编写的功能不适用于某些输入
Scheme (Racket) Properly written function not working with some inputs
所以我在球拍中编写了 I 函数来计算总和:
(define (sum term a next b)
(if (> a b)
0
(+ (term a) (sum term (next a) next b))))
术语是应用于每个参数的函数。 A 是开始 next 是我们前进到下一个元素的方式(即 a2 = 2*a1 或 a2 = a1 +1 等),b 是最后一个元素。
还有2个附加函数:
(define (square x) (* x x))
(define (inc x) (+ x 1))
如果我输入:
(sum square 1 inc 5)
I get which is correct 55
但是如果我输入:
(sum square 1 square 5)
我陷入了一个循环!?为什么 a2 应该是 a1*a1 和 a3=a2*a2 并且 a 应该超过 b 所以结束递归的条件将是 fultifield。很奇怪。
您的 sum
函数将永远循环,因为 (square 1)
的计算结果始终为 1
,并且永远不会大于 5
。
所以我在球拍中编写了 I 函数来计算总和:
(define (sum term a next b)
(if (> a b)
0
(+ (term a) (sum term (next a) next b))))
术语是应用于每个参数的函数。 A 是开始 next 是我们前进到下一个元素的方式(即 a2 = 2*a1 或 a2 = a1 +1 等),b 是最后一个元素。
还有2个附加函数:
(define (square x) (* x x))
(define (inc x) (+ x 1))
如果我输入:
(sum square 1 inc 5) I get which is correct 55
但是如果我输入:
(sum square 1 square 5)
我陷入了一个循环!?为什么 a2 应该是 a1*a1 和 a3=a2*a2 并且 a 应该超过 b 所以结束递归的条件将是 fultifield。很奇怪。
您的 sum
函数将永远循环,因为 (square 1)
的计算结果始终为 1
,并且永远不会大于 5
。