我有在網路上看了三個連結思考怎麼中途跳出遞迴,這個是我寫程式一兩年今天才第一次發現竟然有return之後不會直接結束整個方法的問題,
起因於我在一個遞迴裡面是寫如果檢查出錯誤就return null,
但是我在debug模式跑的時候發現很詭異的是,明明就跑到return null了,怎麼接下來還繼續回到方法繼續跑,沒有直結束方法.........
三個連結中,一個是維基,他說用goto跳出出遞迴
https://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BC%8F%E...
跟我一開始想的一樣,我覺得既然普通的return只能跳出一層,那很多層就不可能跳出,看來只能用goto了
(但是我後來發現goto的偵測範圍好像只限定於方法內部沒辦法goto到方法外,那可能也沒辦法直接跳出迴圈,所以目前我覺得純粹goto不搭配特別設計的return的話好像也沒辦法中途跳出)
不過後來想說再用 break recursive 估狗看看
再看了兩篇文章
http://stackoverflow.com/questions/5973604/how-to-...
http://stackoverflow.com/questions/8589375/stop-th...
看到了不同的可能,
後來思考一下後也發現一種方法可以逆遞迴return出來出要的值,不過可能只適用於某類的情況
底下假設最後希望得出的值是整數的4,如果要如上面所說逆遞迴出來要的值
它的架構類似於(我用C#舉例)
public int Test(){
for(int i=0; i<5; i++)
if(i==4) return i;
else {
//這邊是重點,原本這個else裡一般都只再寫遞迴方法本身Test()而已,但我在這邊加上檢測式,所以遞迴下去Test若都沒遇到4就會一直下去(因為Test()==4本身就會執行Test()因此事實上是有遞迴的效果的,跟直接只寫Test()的效果一樣),但是一旦遇到4,就會往上回傳4,
往上回傳時就會碰到檢測式,一檢測完是4就會再往上回傳4,因此就會逆遞迴持續往上回傳,直接傳出要的值了 這個方法只重其意,細節沒有設計的那麼好,但是用這個原理應該可以在很多種情況下都達成要的目的
if(Test()==4)
return 4;
}
}
