Recursion Scheme-foo(xy)没有调用递归调用

Recursion Scheme-foo(xy)没有调用递归调用,recursion,scheme,Recursion,Scheme,foo(xy)是一个必须在 这是我的方案代码: (define foo (lambda (x y) (if (<= y 0) (x) 0) (if (<= x 0) (y) 0) (if (>= x y) (+ x foo ((- x 1) (- y 2))) 0) (if (< x y) (+ y foo ((- x 2) (- y 3))) 0))) (定义foo (λ(x y) (如果(它打印的是相同的精确数字,而不是12!!

foo(xy)是一个必须在 这是我的方案代码:

(define foo
  (lambda (x y)
    (if (<= y 0) (x) 0)
    (if (<= x 0) (y) 0)
    (if (>= x y) (+ x foo ((- x 1) (- y 2)))  0)
    (if (< x y) (+ y foo ((- x 2) (- y 3))) 0)))
(定义foo
(λ(x y)

(如果(它打印的是相同的精确数字,而不是12!!我不知道它为什么不进行递归调用。

这里没有递归调用。要使它成为一个调用,你需要在它周围加上括号,如
(foo(-x2)(-y3))

只有最后一个
if
被视为是过程的结果。前面的所有条件都返回一个值,因为它不是最后一个,所以它会丢弃结果并继续到下一个。为了使多个条件表示某个内容,它们必须嵌套。因此,将整个下一个
if
替换为0

(define (foo x y)
  (if (<= x 0)
      x
      (if (<= y 0)
          y
          ...)))
(define (foo x y)
  (cond
    ((<= x 0) x)
    ((<= y 0) y)
    ...
    (else ...)))