1

我知道如何计算数字的位数之和:

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

但我只是不知道计算数字。而且也不知道如何通过线性迭代进展来做到这一点。

谢谢!!

4

2 回答 2

0

非常接近答案。

为了弄清楚如何将数字和变为数字计数,请尝试编写一些测试用例。测试用例必须包括调用函数的示例,以及预期的结果。

附带说明一下,这是生成递归的一个例子,你不应该解决它,直到你完成了一堆问题,比如“在列表中添加数字”、“计算列表中的元素”等.

于 2012-10-04T21:13:46.140 回答
0

关于您的每个问题的一些提示:

  1. 对于数字计数,您不需要添加当前数字(就像您的代码中的情况一样)。只需添加1
  2. 有几种策略可以将递归解决方案(如您的解决方案)转换为尾递归(一种生成线性迭代进度的策略)。这是一个简短的列表:

    • 向函数添加一个额外的参数以保存到目前为止累积的结果
    • 第一次调用过程时传递累加器的初始值,通常这与您在“正常”(非尾递归)递归中在基本情况下返回的值相同。
    • 在递归的基本情况下返回累加器
    • 在递归步骤,用新值更新累积结果并将其传递给递归调用
    • 最重要的是:当调用递归时,请确保将其作为最后一个表达式调用,无需执行“额外工作”。
于 2012-10-04T22:40:01.743 回答