是递归吗?我想从技术上讲是这样,因为该方法有一个基本案例,否则会推迟到自身。
但是,这并不是一个特别好的递归示例,因为只有两种情况。而在第二种情况下(团队不存在),递归调用总是会立即返回。所以正如其他人所说,用 替换最后一行会更有意义return newTeam
,因为这是完全等价的(并且更简单/更容易理解)。
在稍微深奥的一点上,递归往往与函数式编程风格相关联,这种风格通常会避免可变变量。通常,递归方法会使用不同的参数再次调用该方法,并且该方法将像一个函数一样工作,即在给定相同输入的情况下总是返回相同的结果。从技术上讲,你没有理由不能拥有递归和可变性,但就个人而言,它会打破我的先入之见并使我感到困惑。(就像你可以调用一个方法一样,add
如果它需要两个整数并返回它们的最大值;它在技术上是有效的,但它会导致人们做双重考虑。)
如果有帮助,这是一个经典的递归示例 - 查看字符串列表是否包含给定元素:
public boolean recContains(String elem, List<String> list) {
if (list.isEmpty())
return false;
else if (list.get(0).equals(elem))
return true;
else
return recContains(elem, list.subList(1, list.length()));
}
请注意:
- 这是功能性的:给定相同的两个参数,它将始终返回相同的结果。
- 它有一个简单的基本情况,其中递归不能更进一步,源自其参数(列表为空)。
- 它有一个递归案例,它再次调用该方法,但“减少”它的一个或多个参数,这样它们最终将成为基本案例条件。
- 递归涵盖了任意数量的迭代:虽然您的示例总是在最多一次递归调用之后完成,但这个示例理论上适用于任何大小的列表(具有那么多递归调用)。
对于适当的递归方法,这些可能在技术上不是必需的,但它们绝对是我会与它们相关联的那种属性。