[問題] 遞迴次數有沒有上限?

看板java作者 (昱)時間13年前 (2012/03/01 09:18), 編輯推噓6(6010)
留言16則, 7人參與, 最新討論串1/2 (看更多)
不好意思我是java的新手(剛學第五天...) 如果發問不得當真的很抱歉... 我目前正在寫小畫家 但剛剛寫油漆桶功能的時候卻遇到奇怪的問題 基本上我是用Depth First Search的概念寫成遞迴函數 從滑鼠點下去的那點作為樹根 一直向外擴散尋找需要變色的像素 擴散順序是先往右邊找 再往上、往左 最後往下找 結果測試結果發現 如果用鉛筆圈出一塊小面積(有測過奇形怪狀) 油漆桶都可以成功把內部著色 但如果面積稍微大一點(大概超過50x50個像素的話) 它就無法著色了 所以懷疑是如果遞迴呼叫太多次它就會發生問題 測試了一下也發現 如果面積太大的話 遞迴總是跑到一半就自動被強行結束(每次結束的點都不一樣) 可是遞迴次數應該不可能會有限制吧!? 上網都沒有查到這方面有什麼限制存在 也不太可能是演算法出錯 因為面積夠小還是可以成功著色 由於程式碼有點多(大概25行) 不太確定要不要PO出來 遞迴函數傳入的參數有三個 一個是BufferedImage 一個是跟像素數量一樣多的布林二維陣列 還有一個Point 難道是傳入的參數太龐大的問題? 如果有需要檢查程式碼的話我可以再貼出來@@ 煩請高手解惑!! ---------------------------- 對不起我不知道有錯誤訊息這種東西QQQQ 是下面這個嗎? Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError 它後面接了很多 at ..... 前幾個是這樣 at java.awt.image.DirectColorModel.getRGB(DirectColorModel.java:438) at java.awt.image.DirectColorModel.getRGB(DirectColorModel.java:704) at java.awt.image.BufferedImage.getRGB(BufferedImage.java:871) at painter.test2.recursive(test2.java:887) at painter.test2.recursive(test2.java:891) at painter.test2.recursive(test2.java:891) 之後全部都是recursive函數 對不起我以後會注意版規的QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.250.189

03/01 17:22, , 1F
遞迴是拿記憶體、執行速度去換取程式碼上的簡潔性....
03/01 17:22, 1F

03/01 17:53, , 2F
要有錯誤訊息先啊。
03/01 17:53, 2F

03/01 18:47, , 3F
版規五... 不過念在你問題敘述夠詳細,就先鎖文
03/01 18:47, 3F

03/01 18:48, , 4F
請先看看有沒有 Exception 訊息,再懷疑程式碼 XDXD
03/01 18:48, 4F
※ 編輯: tossakite 來自: 140.112.250.189 (03/01 21:06)

03/01 21:15, , 5F
是遞迴太多沒錯,請小心有沒有無限遞迴,或乾脆換成迴圈
03/01 21:15, 5F

03/02 09:05, , 6F
最令人討厭的錯誤之一XD
03/02 09:05, 6F

03/02 10:17, , 7F
或許可參考:http://goo.gl/EEyHr
03/02 10:17, 7F

03/02 15:18, , 8F
都寫到這種程度的程式了,不知道有錯誤訊息也太神了點
03/02 15:18, 8F

03/02 23:29, , 9F
謝謝sbrhsieh~我會研究看看的! 因為以前有學過半年C++
03/02 23:29, 9F

03/02 23:31, , 10F
只是剛碰Java不知道有錯誤訊息可以參考@@
03/02 23:31, 10F

03/03 00:23, , 11F
又不是在打卡的時代,怎麼會沒有錯誤訊息@@
03/03 00:23, 11F

03/04 02:10, , 12F
剛剛把問題解決了!! 感謝各位高手的幫忙:)
03/04 02:10, 12F

03/04 12:18, , 13F
去買記憶體,反正現在DRAM廠快掛了,快去買
03/04 12:18, 13F

03/04 14:23, , 14F
結果是什麼問題?
03/04 14:23, 14F

03/05 16:25, , 15F
就一樣遞迴過2000多層就壞掉 我改成超過2000層就跳出遞
03/05 16:25, 15F

03/05 16:27, , 16F
迴 然後再加上其他補救措施@@
03/05 16:27, 16F
文章代碼(AID): #1FJpxegt (java)
文章代碼(AID): #1FJpxegt (java)