亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

包裝遞歸函數總是一個好的做法嗎?

包裝遞歸函數總是一個好的做法嗎?

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

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

不,這并不總是必要的。僅當您有特定原因時才需要將其包裝。以下是您可能需要包裝它的幾個原因:

  • 如果它傳遞給自己的參數與它在初始調用中收到的參數不同,無論出于何種原因

    • 也許遞歸參數很復雜,調用者很難為它們提供適當的初始值

    • 也許初始參數與遞歸參數明顯不同

  • 如果您需要起始位置(例如,包裝器)具有與遞歸方法本身不同的訪問級別。

可能還有幾個。

但許多遞歸方法不需要包裝。例如,帶有謂詞的經典深度優先節點遍歷方法在遞歸期間與初始調用期間不需要任何特殊傳遞,因此無需包裝它。


查看完整回答
反對 回復 2023-06-21
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

遞歸函數通常需要一個參數來表示先前調用的累積結果。問題域中的一個假設示例是

public int numberOfPossibleTraversals(Node node, List<Rule> rules) { ...

所以第一個 arg 在每個遞歸調用中被修改。您使用這樣的起始值開始調用鏈

int c = numberOfPossibleTraversals(root, rules);

有時(取決于具體實現)為累積參數建立初始值可能需要一些邏輯/處理。這就是“包裝器”方法可能發揮作用的地方。例如,圖本身可能有這樣一個包裝函數,它為遞歸函數構建參數


查看完整回答
反對 回復 2023-06-21
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號