2013-10-12 25 views
-4

從一個總和到b的整數的一種方法是將間隔分成兩半,遞歸地求和兩半,然後將兩個和相加。如果間隔有奇數個整數,則儘可能將其分成幾半。您可以使用floor函數返回小於某個實際值的最大整數。在Scheme中編寫遞歸過程。 (總和減去一個b)

(define sum-by-halves (lambda (a b) your_code_here))

有沒有人有一個想法,以解決這個問題?

+4

*「詢問代碼的問題必須顯示對所解決問題的最小理解,包括嘗試的解決方案,爲什麼他們不工作,以及預期的結果。 meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)"*。你剛剛在這裏複製你的作業,逐字。這並不好玩。嘗試自己解決它,這很有趣。顯示任何嘗試,通過編輯您的問題發佈一些代碼。不符合SO準則的問題可以結束。 –

+2

@WillNess不僅如此,這不是OP所要求的第一個問題;請參閱[DrRacket過程主體幫助(boolean-odd?x)](http://stackoverflow.com/q/19281849/1281433)。 Deniz:Stack Overflow不是一個家庭作業解決方案工廠。要求提供代碼的問題需要證明你已經做了一些事情,並且遇到了問題。沒有解決方案來交付編程任務不算作編程問題。這個「問題」大多是一組指示。至於「有沒有人有解決這個問題的想法?」我希望答案是「是的」。 –

+0

你知道關於可能性被禁止問這個問題,因爲發佈「壞」的問題?要小心,SO可以這樣無情。 –

回答

1

如果您要遞歸解決問題,則需要i)確定停止條件,ii)找出如何將較大的問題分解爲相同但較小的問題。你已經有'ii'(除了細節)。 '我'會是什麼?

停止條件是當兩個數字'a'和'b'相同時。因此,您的出發點是:

(define (sum-by-halves a b) 
    (if (= a b) 
     a 
     ...)) 

對於'...',您需要'a'和'b'之間的'c'。

(define (sum-by-halves a b) 
    (if (= a b) 
     a 
     (let ((c (div (+ a b) 2))) 
     (+ (sum-by-halves a c) 
      (sum-by-halves (+ c 1) b))))) 

通過選擇div我保證c將永遠是一個整數,要麼一半或不到一半。因此(+ c 1)將不會超過b。注意:代碼假定(<= a b)