我写了一个平方和函数来测试一个数字 n 是否可以写成两个平方和。我的代码如下:
(define (square x) (* x x))
(define (sum-of-squares n)
(define (sum-of-squares-h k)
(cond ((= k n) #f)
((= n (+ (square(floor(sqrt k)))(square(floor(sqrt(- n k))))))#t)
(sum-of-squares-h (+ k 1))))
(sum-of-squares-h 1))
当我测试以下内容时:
(sum-of-squares 1)
(sum-of-squares 2)
(sum-of-squares 4)
(sum-of-squares 8)
(sum-of-squares 10)
我的输出是:
#f
#t
2
2
#t
我哪里出错了/我能做些什么来解决这个问题?我已经看到了解决这个问题的其他方法,但是如果有人可以通过使用我已经拥有的东西来帮助我,那就太好了。我对地板功能不太熟悉,所以我可能用错了。
编辑 - 有一些调整的代码
(define (square x) (* x x))
(define (sum-of-squares n)
(define (sum-of-squares-h k)
(cond ((= k n) #f)
((< n 4) #f)
((= n (+ (square(floor(sqrt k)))(square(floor(sqrt(- n k))))))#t)
(sum-of-squares-h (+ k 1))))
(sum-of-squares-h 1))