我有在網路上看了三個連結思考怎麼中途跳出遞迴,這個是我寫程式一兩年今天才第一次發現竟然有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;

}

}



文章標籤
全站熱搜
創作者介紹
創作者 olivermode 的頭像
olivermode

olivermode的部落格

olivermode 發表在 痞客邦 留言(0) 人氣(2,577)