【问题标题】:Recursive Function Looping Through Array [duplicate]遍历数组的递归函数[重复]
【发布时间】:2015-09-10 22:18:38
【问题描述】:

我在尝试循环遍历数组时遇到了很多问题。

所以我循环遍历一个数组(面积 * 2)次。我的意思是,如果我有一个 100x100 数组,我将循环遍历它 20,000 次(100 * 100 * 2)。 在循环中,如果它找到一个不等于 1 的值,则将其赋值为 1。 我已经完成了所有这些工作,但由于 StackOverflow,Eclipse 不会让我运行它。

public static void checkPos() {
    while(canrun) {
        if(x < Canvas.length - 1) {
            x++;
        } else {
            x = 0;
            if(y < Canvas.length - 1) {
                y++;
            } else {
                y = 0;
            }
        }
        if(Canvas[x][y] != 0) {
            filled++;
            Assign(x, y);
            break;
        }
    }
}

public static void Assign(int x, int y) {
    Canvas[x][y] = 1;
    if(filled < spots) {//ERROR POINTING HERE
        checkPos();
    } else {
        printObj();
        System.exit(0);
    }
}

任何帮助或正确方向的观点都会有所帮助。

【问题讨论】:

  • 解决方案:不要使用递归。而是使用堆栈。
  • Java 中的堆栈非常小(如果我没记错的话,在 5 000 到 7 000 次递归调用之间)
  • 你有循环依赖。
  • 有没有办法解决这个问题?
  • @HovercraftFullOfEels 递归是使用...堆栈实现的。你的意思是使用迭代?这就是我昨天建议的解决方案。 (这个问题是 OP 原始问题的略微修改的副本)对不起,伙计,但我将不得不投票结束。由于您似乎仍在苦苦挣扎,我将尝试更详细地解决您的问题。

标签: java arrays recursion


【解决方案1】:

你需要了解当你使用递归函数时会发生什么,一个函数在堆栈中直到它返回一个值,当你使用递归函数时你一遍又一遍地调用同一个函数,但你在每个函数中都这样做,这意味着您将堆栈浮动到您可能无法从操作系统获得的大小,在您的情况下,这很简单,我建议您删除递归并在一个循环中使用它,您可以使用, 画布[x][y] = 1; 如果(...){ 休息; } 别的{ 返回 bla bla }

在原始循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2010-12-08
    • 2020-09-26
    • 2013-08-02
    相关资源
    最近更新 更多