Java递归函数失败

Java递归函数失败,java,recursion,jgraph,Java,Recursion,Jgraph,我的职能是: private void addEdges(mxICell mainObject, List<Object> edgesList) { if (mainObject.getEdgeCount() > 0) { // for (int i = 0; i < mainObject.getEdgeCount(); i++) { edgesList.add(mainObject.getEdgeAt(0)

我的职能是:

private void addEdges(mxICell mainObject, List<Object> edgesList) {
        if (mainObject.getEdgeCount() > 0) {
            // for (int i = 0; i < mainObject.getEdgeCount(); i++) {
            edgesList.add(mainObject.getEdgeAt(0));
            addEdges(((Line) mainObject.getEdgeAt(0)).getSource(), edgesList);
        }
        // }
        else
            return;
    }

这是因为一旦
main对象的边缘计数大于零,函数就会反复调用自身,导致stackoverflow异常。您需要定义一个适当的终止条件

在您的数据结构中很可能有一个圆圈

例如:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1

或者类似的。事实是,递归调用永远不会终止

这是因为一旦
main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件

在您的数据结构中很可能有一个圆圈

例如:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1

或者类似的。事实是,递归调用永远不会终止

这是因为一旦
main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件

在您的数据结构中很可能有一个圆圈

例如:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1

或者类似的。事实是,递归调用永远不会终止

这是因为一旦
main对象的边缘计数大于零,函数就会反复调用自身,导致堆栈溢出异常。您需要定义一个适当的终止条件

在您的数据结构中很可能有一个圆圈

例如:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1

或者类似的。事实是,递归调用永远不会终止

如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失


另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作

如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失


另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作

如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失


另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作

如您所示,在注释for循环中,您在main对象中循环所有getedge,同样,在递归调用的情况下,您也必须减少来自main对象的边。您必须减少流中已处理的边,以便在达到下一个级别时,一条边消失



另外,您还必须确保,然后您正在为线对象执行getsource,它将如何达到没有更多边要处理的级别,以便终止条件正常工作

edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。
mainObject.getEdgeCount()
总是
>0
。请使用一些终止条件。似乎
mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”
edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。
mainObject.getEdgeCount()
总是
>0
。请使用一些终止条件。似乎
mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”
edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。
mainObject.getEdgeCount()
总是
>0
。请使用一些终止条件。似乎
mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填充堆栈,导致“StackOverflowerError”
edgeCount
是否受循环中的任何操作的影响?如果不是,堆栈溢出是不可避免的。
mainObject.getEdgeCount()
总是
>0
。请使用一些终止条件。似乎
mainObject.getEdgeCount()
总是>0,但不必使用递归函数必须像mainObject.getEdgeCount()或==0结束的条件,否则它会填满堆栈,导致“StackOverflowerError”怎么可能?递归调用是在下一个对象上进行的,在本例中,该对象是((Line)mainObject.getEdgeAt(0)).getSource()。我们没有看到实现,因此唯一的逻辑结论是传递edgecount大于零的
mxICell
对象。也许这里面有一个圆圈