Recursion 方案中的倍数和
所以我对Scheme和函数式编程作为一个整体是非常陌生的。 我正试图编写一个程序,找出1000以下所有3或5的倍数之和。 这是我迄今为止的尝试:Recursion 方案中的倍数和,recursion,functional-programming,scheme,tail-recursion,Recursion,Functional Programming,Scheme,Tail Recursion,所以我对Scheme和函数式编程作为一个整体是非常陌生的。 我正试图编写一个程序,找出1000以下所有3或5的倍数之和。 这是我迄今为止的尝试: (define (sum-of-multiples n) ; Start = 0, End = n, Sum = 0. (get-sum 0 n 0) ) ; A recursive loop that starts at 0 and ends with given n (1000). (define (get-sum start end sum)
(define (sum-of-multiples n)
; Start = 0, End = n, Sum = 0.
(get-sum 0 n 0)
)
; A recursive loop that starts at 0 and ends with given n (1000).
(define (get-sum start end sum)
(cond
; Stopping case.
((= start end) sum)
; If start counter is divisible by 3, add to sum.
((= (remainder start 3) 0) (get-sum (+ start 1) end (+ start sum)))
; If start counter is divisible by 5, add to sum.
((= (remainder start 5) 0) (get-sum (+ start 1) end (+ start sum)))
; Otherwise just increment start counter.
(get-sum (+ start 1) end sum))
)
(display (sum-of-multiples 1000))
(display " ")
我不确定我的代码目前的问题是否是因为方案语法问题,或者是我试图通过递归来解决问题。
因为这两件事我都不擅长
当我运行此代码时,只会显示“0”
如果能帮我找到并纠正错误,那就太好了
谢谢
cond
格式为:
(cond (<condition> <expr>)
.
.
(else <expr>))
使用此修复程序,您的代码将显示
233168
。我没有检查你的算法,但是这个结果看起来比0
:)你在“所有其他情况”的情况下遗漏了else
;应该是
(else (get-sum (+ start 1) end sum))
试图解释从何处获得0:
cond
子句的形式为(条件表达式)
,因此您的条件是get sum
就像
else
,这个条件从来都不是假的
在条件之后还有一个隐式的begin
,因此您所拥有的与
(else (begin (+ start 1) end sum))
其结果是begin
块中最后一个表达式的值,即sum
由于当您第一次达到该条件时,
sum
为0,因此结果为0。啊,太棒了!谢谢:D
(else (begin (+ start 1) end sum))