Wolfram mathematica Mathematica在for循环中崩溃

Wolfram mathematica Mathematica在for循环中崩溃,wolfram-mathematica,Wolfram Mathematica,My Mathematica(版本10.4和新版本11)在以下循环中崩溃: count = 0; findConnectedNodes[start_] := Module[{positions, i}, count++; positions = adjmatrix[[start]] // ArrayRules // Keys; positions = positions[[1 ;; -2]] // Flatten; For[i = 1, i <= Length[positio

My Mathematica(版本10.4和新版本11)在以下循环中崩溃:

count = 0;   

findConnectedNodes[start_] := Module[{positions, i},

count++;
positions = adjmatrix[[start]] // ArrayRules // Keys;
positions = positions[[1 ;; -2]] // Flatten;

For[i = 1, i <=  Length[positions], i++,

 If[Not[MemberQ[connectedNodes, positions[[i]]]], 
  findConnectedNodes[positions[[i]]]];

 AppendTo[connectedNodes, positions[[i]]];
 connectedNodes = connectedNodes // DeleteDuplicates;

 ]

];

findConnectedAddresses[1];
count=0;
findConnectedNodes[start_z]:=模块[{位置,i},
计数++;
positions=adjmatrix[[start]]//数组规则//键;
位置=位置[[1;;-2]//展平;

对于[i=1,i尽管您将变量$RecursionLimit设置为无穷大,但所有编程语言只能递归到这么多。如果我可以正确假设Mathematica编译器正在向您抛出一个“堆栈溢出”错误,当当前本地“堆栈内存”溢出(或超过)最大堆栈内存大小时会发生此错误


根据我的推断,我建议在每次递归结束时强制/手动初始化Mathematica垃圾收集器,以销毁从以前的递归创建的不需要的变量引用。如果您可以在循环崩溃时提供错误消息,我或其他人将能够为您提供更具建设性的固定响应。

尽管您将变量$RecursionLimit设置为无穷大,但所有编程语言只能递归到这么多。如果我可以正确假设Mathematica编译器正在向您抛出一个“堆栈溢出”错误,当当前本地“堆栈内存”溢出(或超过)最大堆栈内存大小时会发生此错误


根据我的推断,我建议在每次递归结束时强制/手动初始化Mathematica垃圾收集器,以销毁从以前的递归创建的不需要的变量引用。如果您可以在循环崩溃时提供错误消息,我或其他人将能够为您提供更具建设性的扎扎实实的回答。

非常感谢您提供的所有提示和想法

我的解决方案是将发现的新节点添加到一个中间变量中,并在该变量上循环,这样我就不会“深入”循环,而是始终停留在一个级别上


如果有人有类似(或相同)的问题,我将编写整个代码。但现在我希望“文本版本”是不言自明的。

非常感谢您提供的所有提示和想法

我的解决方案是将发现的新节点添加到一个中间变量中,并在该变量上循环,这样我就不会“深入”循环,而是始终停留在一个级别上


如果有人有类似(或相同)的问题,我将编写整个代码。但现在我希望“文本版本”是不言自明的。

我无法在我的机器上复制您的问题。请编辑您的代码并显示输入和输出,以获得一个简单的示例。下面是一个稀疏数组:
adjmatrix=SparseArray[{I\u,I\u}->12,{i,j}/;Abs[i-j]==1->1},{5,5}]
@Michael gwerdery您可以在文档中查找
Do
,它的性能比
更好。另外
并行表
您还没有为
连接节点
@Michael Gwerderhave您查看了
邻域图
谢谢您的输入。connectedNodes实际上是以前定义的,我只是忘了在问题中包含。这个问题可能与太多的递归有关。我无法在我的机器上复制您的问题。请编辑您的代码并显示输入和输出,以获得一个简单的示例。这是一个稀疏数组:
adjmatrix=SparseArray[{I_u,I_}->12,{I_u,j}/;Abs[i-j]==1->1},{5,5}]
@Michael gwerdery您可以在文档中查找
Do
,它的性能比
更好。另外
并行表
您还没有为
连接节点
@Michael Gwerderhave您查看了
邻域图
谢谢您的输入。connectedNodes实际上是以前定义的,我只是忘了在问题中包含。这个问题可能与太多的递归有关。谢谢你的回答,我将查看垃圾收集器。关于错误消息:很遗憾,没有。只有windows错误声音,然后所有内核都会“重新启动”(所有数据都丢失了,但内核已备份以进行评估)感谢您的回答,我将查看垃圾收集器。关于错误消息:很遗憾,没有。只听到windows错误声音,然后所有内核都“重新启动”(所有数据丢失,但内核已备份以进行评估)