方案:寻找除数

时间:2013-09-05 18:17:50

标签: scheme

我正在编写一个函数来计算一个数字的除数。例如,4将有3个除数。我写了一个辅助函数如下:

(define (divisors-upto n k)
  (cond((= k 0) 0)
      ((= n 0) 0)
      ((= k 1) 1)
      ((divides k n) (+ 1 (divisors-upto n (- k 1))))
      (else (divisors-upto n (- k 1)))))

但在我的下一个功能中,我无法正常使用我的辅助功能。以下函数是否可用于计算除数?

(define ( divisors n ) ( divisors-upto n n ))

1 个答案:

答案 0 :(得分:1)

该程序原则上 。只要程序divides得到正确实施,它就可以正常运行。例如:

(divisors 10)
=> 4 ; 10, 5, 2 and 1 are divisors of 10

仅供参考,当你有一个辅助程序被一个或多个来自“主”程序,的额外参数调用时,辅助程序永远不会在其他地方使用,这是一个好主意将帮助器声明为内部定义,例如:

(define (divisors n)
  (define (divisors-upto n k)
    (cond ((= k 0) 0)
          ((= n 0) 0)
          ((= k 1) 1)
          ((divides k n) (+ 1 (divisors-upto n (- k 1))))
          (else (divisors-upto n (- k 1)))))
  (divisors-upto n n))