为了账号安全,请及时绑定邮箱和手机立即绑定

包装递归函数总是一个好的做法吗?

包装递归函数总是一个好的做法吗?

蛊毒传说 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 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信