首页 > 解决方案 > 在 Mathematica 中查找删除列表中重复项的递归算法

问题描述

我想在 Mathematica 中实现一个算法,从给定列表中删除重复项。这是我尝试过的:

delrec[l___List] := Module[{m = {}},
If[Length[l] != 1,
If[MemberQ[l[[1 ;; Length[l] - 1]], l[[Length[l]]]], 
  delrec[DeleteCases[l[[1 ;; Length[l] - 1]]], 
  delrec[l[[1 ;; Length[l] - 1]]]] ,
 Print[l]];
l
];]

但是,这段代码并没有真正起作用,我不确定为什么。我还需要以相同的顺序输出列表,因此删除了重复项,但列表的排序保持不变。使用 DeleteDuplicates 或 Union 不是一种选择。该函数需要是递归的。

标签: recursionwolfram-mathematica

解决方案


DelRek[l___List] := 
 If[Length[l] > 1, 
  Prepend[DelRek[
    If[MemberQ[Drop[l, 1], First[l]], 
     DeleteCases[Drop[l, 1], First[l]], Drop[l, 1]]], First[l]], l]

或者

DelRek[l___List] := 
 If[Length[l] > 1, 
  Prepend[DelRek[
    DeleteCases[Drop[l, 1], First[l]], First[l]]],
  l]

推荐阅读