我正在使用遞歸函數(shù)來計算從一個節(jié)點開始到另一個給定的一組規(guī)則(例如:最小/最大/確切的停止次數(shù))的圖表中可能的遍歷次數(shù)。我想知道調(diào)用一個調(diào)用遞歸函數(shù)的包裝函數(shù)而不是直接調(diào)用它是否是一個好習慣。大多數(shù)時候我看到人們使用包裝函數(shù)。只是想知道為什么以及有什么優(yōu)缺點以及在什么情況下我們必須包裝它?
2 回答

小怪獸愛吃肉
TA貢獻1852條經(jīng)驗 獲得超1個贊
不,這并不總是必要的。僅當您有特定原因時才需要將其包裝。以下是您可能需要包裝它的幾個原因:
如果它傳遞給自己的參數(shù)與它在初始調(diào)用中收到的參數(shù)不同,無論出于何種原因
也許遞歸參數(shù)很復雜,調(diào)用者很難為它們提供適當?shù)某跏贾?/p>
也許初始參數(shù)與遞歸參數(shù)明顯不同
如果您需要起始位置(例如,包裝器)具有與遞歸方法本身不同的訪問級別。
可能還有幾個。
但許多遞歸方法不需要包裝。例如,帶有謂詞的經(jīng)典深度優(yōu)先節(jié)點遍歷方法在遞歸期間與初始調(diào)用期間不需要任何特殊傳遞,因此無需包裝它。

千萬里不及你
TA貢獻1784條經(jīng)驗 獲得超9個贊
遞歸函數(shù)通常需要一個參數(shù)來表示先前調(diào)用的累積結(jié)果。問題域中的一個假設(shè)示例是
public int numberOfPossibleTraversals(Node node, List<Rule> rules) { ...
所以第一個 arg 在每個遞歸調(diào)用中被修改。您使用這樣的起始值開始調(diào)用鏈
int c = numberOfPossibleTraversals(root, rules);
有時(取決于具體實現(xiàn))為累積參數(shù)建立初始值可能需要一些邏輯/處理。這就是“包裝器”方法可能發(fā)揮作用的地方。例如,圖本身可能有這樣一個包裝函數(shù),它為遞歸函數(shù)構(gòu)建參數(shù)
添加回答
舉報
0/150
提交
取消