recursion - 方案 - foo(x y) 没有调用递归调用

标签 recursion scheme

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/

相关文章:

sql - 在递归 SQL 表中查找最低公共(public)父级

Java URL 方法未正确填充递归

haskell - 将递归函数重写为管道函数组合

c++ - 我是否需要遍历两个子树进行计算,从根到叶的总和,到给定值?

java - 递归问题初学者简单java

scheme - 定义 Scheme 函数

dynamic - 如何在Scheme中获取值的类型?

lambda - 在Scheme中使用map和lambda计算点积

Lisp 变量不递增?

scheme - 方案中循环定义的问题