use*_*168 0 java stack-overflow recursion backtracking
我正在尝试解决一个需要递归回溯的问题,我的解决方案会产生堆栈溢出错误.我知道这个错误通常表示终止条件不好,但我的终止条件似乎是正确的.除了可能导致堆栈溢出错误的错误终止条件之外还有什么吗?我怎么能弄清楚问题是什么?
编辑:抱歉试图发布代码,但它太丑了..
正如@irreputable所说,即使您的代码具有正确的终止条件,也可能是问题对于堆栈来说太大了(因此在达到条件之前堆栈已经耗尽).还有第三种可能性:你的递归已进入循环.例如,在深度优先搜索图表时,如果您忘记将节点标记为已访问,则最终会进入圈子,重新访问您已经看过的节点.
你如何确定你所处的这三种情况中的哪一种?尝试描述每个递归调用的"位置"(这通常涉及函数参数).例如,如果您正在编写一个函数在相邻节点上调用自身的图算法,那么节点名称或节点索引就可以很好地描述递归函数的位置.在递归函数的顶部,您可以打印描述,然后您将看到该函数的作用,也许您可以判断它是否做正确的事,或者它是否在圈内.您还可以将描述存储在HashMap中,以检测是否已输入圆圈.
| 归档时间: |
|
| 查看次数: |
12605 次 |
| 最近记录: |