2012-10-04 61 views
1

我知道如何計算的一些數字的總和:如何計算方案中的給定數量的數字遞歸迭代和

(define (sum-of-digits x) 
    (if (= x 0) 0 
     (+ (modulo x 10) 
     (sum-of-digits (/ (- x (modulo x 10)) 
          10)))))` 

但我只是沒有一個線索,使數字的計數。也不知道如何通過線性迭代進度來實現這一點。

謝謝!

+1

注意:這個問題並不一定需要遞歸。另一種方法是取* x *的* log10 *。 – dyoo

回答

0

你是非常接近到答案。

爲了弄清楚如何將位數總和轉換爲位數,請嘗試編寫一些測試用例。測試用例必須包含一個調用函數的例子,以及預期的結果。

請注意,這是生成遞歸的一個例子,你不應該直到解決它,直到你做了一堆問題,比如「在列表中添加數字」,「計數元素列表中的」等

+0

終於完成了!非常感謝! – user1721224

0

關於你的每一個問題的一些提示:

  1. 用於計數的數字,你不需要添加當前數字(這是在你的代碼的情況下) 。只需添加1
  2. 將遞歸解決方案(如您的)轉換爲尾遞歸(生成線性迭代進度的方法)有幾種策略。這裏是一個簡短的清單:

    • 一個額外的參數添加到函數舉行迄今已累計
    • 結果傳遞的初始值累加器你第一次調用過程,通常這是相同的值你會以「正常」(非尾遞歸)遞歸方式在基本情況下返回。
    • 在遞歸
    • 的基本情況返回累加器在遞歸步驟,用一個新值更新累積的結果,並把它傳遞給遞歸調用
    • 而最重要的是:在時機成熟時調用遞歸,確保將其稱爲最後一個表達式,不需要執行「額外工作」。
+1

非常感謝!第一個真的有效!還在繼續工作 – user1721224