幾種方法:
1. 遞歸結束時 throw exception, 在頂層代碼 try catch
2. 把遞歸函數放到壹個獨立線程執行,在主線程做 condition wait,遞歸結束時notify下,然後直接退出線程。
3. setjmp + longjmp 本質上和異常差不多,只是用純C實現罷了
都是些奇技淫巧,壹般用不到?
這個得要壹些奇技淫巧,在高級語言的層面,我覺得沒有壹個通用的方法,並不推薦。
從原理上來說,函數調用的時候,返回地址是壓到棧裏的,按照先進後出,要壹層層取出來上層的返回地址。
exception也非常不推薦。?
講道理的話
對於這種情境, goto最簡潔。
遞歸。我才看清題目。
我想問的是,為啥有這種奇怪的需求。
應用場景能描述下嗎??
假設可以忽略各層遞歸的中間狀態!那麽使用遞歸的意義又何在直接用循環好了!
如果需要考慮遞歸的中間狀態!那麽為什麽要直接退到最外層?
實際工作中是要避免使用遞歸!因為遞歸都能拆成循環!遞歸效率太低!可以試壹試goto,合理的運用,可以節省很多代碼,也可以把復雜的邏輯簡單化。都說goto可怕,但是也沒有人說過,使用了goto以後,出現了什麽可怕的事情。這個問題有點意思。。。我見過很多程序員寫了個遞歸出不來了。。。哈哈哈哈。。。跑題了。。。用個全局變量判斷壹下可以麽?雖然不太喜歡全局變量。。。#include 以後用極詭異的兩個標準庫函數:setjmp()和longjmp()。人家是非本地跳轉,比goto不知道高到哪裏去了。