foo(x Y) 是一个必须解决这个问题的过程 Picture. 这是我的方案代码:
(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 5 6) => 时,它会打印相同的确切数字,而不是 12 !!我不知道为什么它没有经过递归调用..
最佳答案
这里没有递归调用。为了使其成为一个调用,您需要在其两侧加上括号,例如 (foo (- x 2) (- y 3))
只有最后一个if
被视为成为过程的结果。所有前面的结果都返回一个值,并且由于它不是最后一个,因此它会丢弃结果并继续执行下一个。为了使多个条件有意义,它们必须嵌套。因此,您将放置整个下一个 if
,而不是 0。
(define (foo x y)
(if (<= x 0)
x
(if (<= y 0)
y
...)))
还有 cond
可以创建一个更扁平的结构,在其他语言中起到 if-elseif-else
的作用。
(define (foo x y)
(cond
((<= x 0) x)
((<= y 0) y)
...
(else ...)))
关于recursion - 方案 - foo(x y) 没有调用递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701573/