Scheme - 检索数字中数字的出现次数

时间:2014-11-07 22:08:09

标签: scheme

我正在通过bert计划练习并在这个练习中遇到困难:

示例:(n-occurences 544555 5)=> 4

任何想法如何进行计数?

我在想这样的事情:

 (define (occurences d n)
   (if (equal? (remainder d 10) n)
       (add1 (occurences (quotient d 10) n))
       (occurences (quotient d 10) n)
       ))

所以在一个例子中,如1223 2,它会:

  1. 检查3是否为2
  2. 拒绝,然后继续使用122 2
  3. 再次拨打电话
  4. 检查2是否为2
  5. 说是,并在12 2(计数为1)
  6. 的呼叫中加1
  7. 检查2是否为2。
  8. 同意,并在1 2(计数为2)
  9. 的呼叫中加1
  10. 检查1是否为2。
  11. 说不,做完。

1 个答案:

答案 0 :(得分:0)

您错过了递归的基本情况;如果d为0,你需要停止。你把n和d混合了几次:

(define (occurences d n)
  (if (= 0 d)
      (if (= 0 n) 1 0)  ; base case
      (if (= (remainder d 10) n)
          (add1 (occurences (quotient d 10) n))
          (occurences (quotient d 10) n))))

测试:

> (occurences 544555 5) 
4

参数(d和n)演变如下:

d=544555  n=5
d=54455  n=5
d=5445  n=5
d=544  n=5
d=54  n=5
d=5  n=5
d=0  n=5