代码之家  ›  专栏  ›  技术社区  ›  Ixmatus

子列表上的方案最大值

  •  1
  • Ixmatus  · 技术社区  · 16 年前

    我编写了一个函数来从嵌套列表中获取最大值,我将函数的一般形式设置为向下;它适用于平面列表和嵌套列表,但在有兄弟嵌套列表时似乎失败。

    这是我的代码:

    (define (multi-max array)
      (cond
        ((null? array) 0)
        ((number? (car array))
          (if (> (car array) (multi-max (cdr array)))
           (car array)
           (multi-max (cdr array))))
        ((pair? (car array))
         (multi-max (car array)))
        (else
         (multi-max (cdr array)))))
    

    以下是失败的测试列表: (multi-max '(1 9 83 9 (332 (334) (2 3 4224))))

    我不知道我哪里出错了,逻辑上,一些帮助会是好的!

    1 回复  |  直到 16 年前
        1
  •  3
  •   Nick Dandoulakis    16 年前

    我找不到逻辑错误,所以我重写了它 更多 递归方式:)
    在编写函数之前,首先识别递归部分是很重要的。

    multi-max 可以递归定义为 multi-max = max(multi-max(car), multi-max(cdr))

    (define (multi-max array)
      (cond ((pair? array) (max (multi-max (car array)) (multi-max (cdr array))))
            ((number? array) array)
            (else 0)))
    

    (multi-max '(1 9 83 9 (332 (334) (2 3 4224))))
    现在输出 4224 .

    编辑: 好吧,我想我发现了错误:

    ...
    ((pair? (car array))
     (multi-max (car array)))
    (else
     (multi-max (cdr array))))
    ...
    

    代码忽略了 (cdr array) (pair? ) 部分和 (car array)
    (else ) 部分。

    应该是:

    (else (max (multi-max (car array)) (multi-max (cdr array))))
    

    (*)注意 (pair? ) 被移除。