Wolfram mathematica 程序仍处于无限递归中
我试图使用Wolfram Mathematica创建一个合并排序,但我仍然得到这个递归错误,我不知道我在哪里出错。我从Java重写了这段代码,在Java中它工作得很好,所以我想这对Wolfram来说是一件特别的事情。你知道我的代码有什么问题吗 非常感谢 Heer是我的代码:Wolfram mathematica 程序仍处于无限递归中,wolfram-mathematica,wolfram-language,Wolfram Mathematica,Wolfram Language,我试图使用Wolfram Mathematica创建一个合并排序,但我仍然得到这个递归错误,我不知道我在哪里出错。我从Java重写了这段代码,在Java中它工作得很好,所以我想这对Wolfram来说是一件特别的事情。你知道我的代码有什么问题吗 非常感谢 Heer是我的代码: mergeSort[x_, left_, right_] := Module[{array = x, middle, n1, n2, L, R, i, j, k}, If[left < right,
mergeSort[x_, left_, right_] :=
Module[{array = x, middle, n1, n2, L, R, i, j, k},
If[left < right,
middle = (left + right) / 2;
mergeSort[array, left, middle];
mergeSort[array, middle + 1, right];
n1 = middle - left + 1;
n2 = right - middle;
L = {};
R = {};
For[i = 1, i < n1, ++i,
L[[i]] = array[[left + 1]];
];
For[j = 1, j < n2, ++j,
R[[j]] = array[[middle + 1 + j]];
];
i = 0;
j = 0;
k = left;
While[i < n1 && j < n2,
If[L[[i]] <= R[[j]],
array[[k]] = L[[i]];
i++;
,
array[[k]] = R[[j]];
j++;
];
k++;
];
While[i < n1,
array[[k]] = L[[i]];
i++;
k++;
];
While[j < n2,
array[[k]] = R[[j]];
j++;
k++;
];
Return[array];
];
]
mergeSort[x,左,右]:
模[{array=x,middle,n1,n2,L,R,i,j,k},
如果[左<右,
中间=(左+右)/2;
合并排序[数组,左,中];
合并排序[数组,中间+1,右];
n1=中间-左侧+1;
n2=右-中;
L={};
R={};
对于[i=1,i 如果[L[[i]]代码中有三个主要问题
您试图调整的GfG代码通过引用传递数组arr
,因此每个递归都在同一个对象上运行。这在Mathematica中通常不会发生。我添加了HoldFirst
来传递array
。另一种方法是将array
从函数调用中删除并将其作为全局变量直接修改
mergeSort[left_, right_] := Module[{},
If[left < right,
middle = Floor[(left + right)/2];
mergeSort[left, middle];
mergeSort[middle + 1, right];
...
{3,58,98}
注意这已经改变了数组的内容
array
{3,58,98}
替代版本
在Mathematica习语中,一个更具代表性的版本是
merge[lis_List,{}]:=lis
合并[{},列表]:=lis
合并[{a_uu,ra_uu},{b_u,rb_uuu}]:=
如果[a代码中有三个主要问题
您试图调整的GfG代码通过引用传递数组arr
,因此每个递归都在同一个对象上运行。这在Mathematica中通常不会发生。我添加了HoldFirst
来传递array
。另一种方法是将array
从函数调用中删除并将其作为全局变量直接修改
mergeSort[left_, right_] := Module[{},
If[left < right,
middle = Floor[(left + right)/2];
mergeSort[left, middle];
mergeSort[middle + 1, right];
...
{3,58,98}
注意这已经改变了数组的内容
array
{3,58,98}
替代版本
在Mathematica习语中,一个更具代表性的版本是
merge[lis_List,{}]:=lis
合并[{},列表]:=lis
合并[{a_uu,ra_uu},{b_u,rb_uuu}]:=
如果[a Hm..我真的不知道如何解决这个问题,因为在其他语言如Java中,它只是工作。@我不知道它是如何工作的。也许你也应该发布Java代码。这是GfG-Hm的代码。我不确定如何解决这个问题,因为在其他语言如Java中,它只是工作。@我不知道它是如何工作的。也许你应该你也可以发布Java代码-