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

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

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