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