子列表上的最大方案

时间:2010-01-09 07:47:54

标签: recursion scheme racket

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

这是我的代码:

(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 个答案:

答案 0 :(得分:3)

我没有找到逻辑错误所以我用 more 递归方式重写了它:) 在编写函数之前首先识别递归部分很重要。

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? )已删除。