2015-09-10 54 views
-1

我在嘗試遍歷數組時遇到了很多運行到遞歸函數的問題。通過數組循環的遞歸函數

所以我正在循環一個數組(區域* 2)次。我的意思是,如果我有一個100x100陣列,我正在循環20000次(100 * 100 * 2)。 在循環中,如果它找到一個不等於1的值,它會將其分配給一個值。 我有所有的工作,但Eclipse不會讓我運行它由於StackOverflow。

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); 
    } 
} 

任何幫助或在正確的方向點將有所幫助。

+0

解決方案:不要使用遞歸。而是使用堆棧。 –

+0

Java中的堆棧非常小(如果我的內存正確,在5000到7 000次遞歸調用之間) – Dici

+0

您有循環依賴關係。 –

回答

0

你需要了解當你使用遞歸函數時會發生什麼,函數在棧中直到它返回一個值,當你使用遞歸函數時你一次又一次地調用相同的函數,但是你在每一個函數內都這樣做,意味着你將堆棧浮動到你可能無法從操作系統中獲得的大小,在你的情況下,這很簡單,我建議刪除遞歸併在一個循環中使用它,你可以使用, Canvas [x] [y] = 1; if(...){ break; } 其他{ 回報喇嘛喇嘛 }

原來的循環中。