You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DrRacket递归问题:如何排除初始节点返回祖先姓名列表

解决方案

要实现仅返回所有祖先姓名(不包含自身)的my-ancestors-names函数,核心是移除原函数中添加自身姓名的逻辑,直接递归拼接双亲的祖先结果即可——因为递归处理双亲时,会自然包含双亲自己及其所有祖辈的姓名。

修改后的完整代码:

(define (my-ancestors-names pers)
  (if (empty? pers)
      '()
      (append (my-ancestors-names (human-parent-1 pers))
              (my-ancestors-names (human-parent-2 pers)))))

逻辑说明

  • 当输入人物为空(empty? pers)时,返回空列表,作为递归终止条件。
  • 不为空时,直接递归调用my-ancestors-names处理父母双方,并用append合并两个结果:
    • 调用(my-ancestors-names (human-parent-1 pers))会返回父方所有祖先(包括父亲自己)的姓名列表;
    • 同理,母方调用会返回母方所有祖先(包括母亲自己)的姓名列表;
    • 合并后就是当前人物的全部祖先姓名,且不包含当前人物自身。

为什么之前的尝试失败?

  • 仅去掉cons语句但没调整结构:原函数的cons是添加自身,去掉后直接返回双亲递归结果的拼接才是正确逻辑;
  • 仅取单双亲姓名:这样会丢失祖辈及更上层的祖先,必须通过递归遍历整个家族树的双亲分支才能覆盖所有祖先。

内容的提问来源于stack exchange,提问作者amadecember

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:57:07