两行中有错误:
(stein (/ 2 (- u v)) v))
和
(stein (/ 2 (- v u)) u))))
你应该将差异除以2,而不是反之亦然。那是:
(stein (/ (- u v) 2) v))
(stein (/ (- v u) 2) u))))
最后,请注意,需要进行测试以检查第二个参数是否等于0,否则在某些情况下函数会永远循环。
像这样的东西:
(define (stein u v) (cond ((or (= u 0)(= u v)) v) ((= v 0) u) ((and (even? u) (even? v)) (* 2 (stein (/ u 2)(/ v 2)))) ((and (even? u) (odd? v)) (stein (/ u 2) v)) ((and (odd? u) (even? v)) (stein u (/ v 2))) ((and (and (odd? u) (odd? v))(>= u v)) (stein (/ (- u v) 2) v)) ((and (and (odd? u)(odd? v))(< u v)) (stein (/ (- v u) 2) u))))