在java中将递归转换为迭代?

xvw2m8pv  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(481)

我得到一个堆栈溢出错误,因为我的递归创建了一个无限循环。把这个方法变成一个迭代可以阻止这种情况,但我不知道怎么做!
有人能指导我把递归变成循环吗?

private int findEmpty(int startPos, int stepNum, String key) {
    if (arr[startPos] == null) {
        return startPos;
    }
    return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
}

特别是 return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key); 这导致了错误!

iqjalb3h

iqjalb3h1#

您的递归调用处于尾部位置。因此,它已经描述了一个循环。只需要从语法上说清楚:

private int findEmpty(int startPos, int stepNum, String key) {
  while( True ) 
  {
    if (arr[startPos] == null) {
        return startPos;
    }
    // return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
    ++stepNum;
    int nextPos = getNextLocation(startPos, stepNum, key);
    // return findEmpty(nextPos, stepNum, key);
    startPos = nextPos;
  }
}

我不使用java编写代码。如果以上代码在任何方面不符合要求,请将其视为伪代码并更改为合适的代码。

raogr8fs

raogr8fs2#

如果 arr[startPos] 不是 null 贯穿始终。你需要设置一个条件,比如:

private int findEmpty(int startPos, int stepNum, String key) {
    if (startPos == arr.length) {
        return -1; // The value if no null element is found
    }
    if (arr[startPos] == null) {
        return startPos;
    }
    return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
}

相关问题