我寫了一個平方和函數來測試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))
我不熟悉你用來確定一個數字是否是兩個平方和的公式,你可以發佈一個鏈接到源代碼嗎? –
我沒有鏈接...我的邏輯可能有缺陷。當平方和-h返回true時,如何返回「k」和「(-n k)」以查看我是否獲得了正確的值? –
在代碼中,在返回'#t'之前的確切點放置一個'(display(list k( - n k)))',這樣你就可以檢查結果。或者使用調試器;) –