在Scheme中如何使用递归进行除法?

在Scheme中如何使用递归进行除法?,scheme,Scheme,我试图用三个参数x、y和n定义一个名为(ndividexyn)的递归过程。它返回x除以y的n次结果。我有一个函数,它可以分割 (定义(除以x和y) (/xy))。 现在我正试图使用中的Divide函数来进行nDivide,但我无法让它工作递归实现(尽管为什么会有人这样做): 下面是nDivide的一个迭代实现,它更简单: (define (nDivide x y n) (if (= n 0) x (nDivide (Divide x y) y (- n 1))))

我试图用三个参数x、y和n定义一个名为(ndividexyn)的递归过程。它返回x除以y的n次结果。我有一个函数,它可以分割 (定义(除以x和y) (/xy))。 现在我正试图使用中的Divide函数来进行nDivide,但我无法让它工作

递归实现(尽管为什么会有人这样做):

下面是nDivide的一个迭代实现,它更简单:

(define (nDivide x y n) 
  (if (= n 0)
      x
     (nDivide (Divide x y) y (- n 1))))

(define (Divide x y) (/ x y))
例如:

(nDivide 10000 3 4)
;Value: 10000/81

基本上有两种方法可以多次做某事:

  • 做一次,然后做n-1次
  • 做n-1次,然后做一次
根据您选择的路径,您将获得不同的过程:

; divide, then recurse
(define (nDivide x y n)
    (if (zero? n)
            x
        (nDivide (Divide x y) y (- n 1))))

; recurse, then divide
(define (nDivide x y n)
    (if (zero? n)
            x
        (Divide (nDivide x y (- n 1)) y)))
; divide, then recurse
(define (nDivide x y n)
    (if (zero? n)
            x
        (nDivide (Divide x y) y (- n 1))))

; recurse, then divide
(define (nDivide x y n)
    (if (zero? n)
            x
        (Divide (nDivide x y (- n 1)) y)))