【问题标题】:How to count the digits of a given number in scheme?recursively and iteratively如何计算方案中给定数字的位数?递归和迭代
【发布时间】:2012-09-25 23:57:01
【问题描述】:

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

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

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

谢谢!!

【问题讨论】:

  • 注意:这个问题不一定需要递归。另一种方法是采用 xlog10

标签: count numbers scheme digits recursive-datastructures


【解决方案1】:

非常接近答案。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢!第一个确实有效!第二个还在工作中
    猜你喜欢
    • 2015-05-18
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2016-05-09
    • 2015-03-16
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多