我有一個問題,我的功能在1s和0s迷宮中找到路徑,返回true,如果它是在該路徑上或已找到退出,並返回false如果迷宮是無法解決的。每當我嘗試檢查我的變量的「-1」時,發現堆棧溢出錯誤,但是我的基本案例應該阻止這種情況發生。有沒有辦法使用遞歸更少的堆棧空間?這裏是我的代碼函數與遞歸導致堆棧溢出
bool Pathfinder::check(string& maze, stack<string>& path, int x, int y, int z)
{int checking = 0;
if ((x == 4) && (y == 4) && (z == 4))
{
path.push(this->createCoords(x, y, z));
return true;
}
else
{
if ((x + 1) < 1 || (x + 1) > columns)
{
return false;
}
if ((y + 1) < 1 || (y + 1) > rows)
{
return false;
}
if ((z + 1) < 1 || (z + 1) > floors)
{
return false;
}
if ((x < 0) || (y < 0) || (z < 0))
{
return false;
}
if (this->getValue(maze, x, y, z) == 1)
{
this->setValue(maze, x, y, z, 2);
}
else
{
return false;
}
}
if (this->check(maze, path, x + 1, y, z) ||
this->check(maze, path, x, y + 1, z) ||
this->check(maze, path, x, y, z + 1))
{
checking++;
}
if (this->check(maze, path, x - 1, y, z) && checking == 1) //Overflow error comes from here
{
checking++;
}
if (this->check(maze, path, x, y - 1, z) && checking == 2)
{
checking++;
}
if (this->check(maze, path, x, y, z - 1) && checking == 3)
{
path.push(this->createCoords(x, y, z));
return true;
}
return false;
}
這聽起來像你的功能永遠不會停止遞歸。您是否考慮過使用調試器來追蹤代碼或添加一些日誌記錄,以便了解實際發生的情況? –
這不是問題,但前五個if語句的括號太多了。你不需要任何內在的東西。 –
*有沒有辦法使用遞歸較少的堆棧空間?* - 到目前爲止,您還沒有證明問題是堆棧空間。如果它只是你的代碼中的一個錯誤,或者你的邏輯錯誤導致堆棧溢出,而不僅僅是你是一個迷宮?另外,你測試了哪些數據?如果您還沒有這樣做,我建議您使用更小的迷宮,以確保這不僅僅是一個錯誤。 – PaulMcKenzie