[英]Impact of using recursions in Java
我编写了一个示例Java类,并在方法中将递归用于特定目的。 我在下面显示了特定递归方法的代码(请注意,我在这里仅提及了该方法的必需部分)。
private String checkForDuplicateCVs(final Integer userId) throws SQLException {
//
// Codes to obtain the cvSerialId comes here...
//
final Integer cvCount = (Integer) getSqlMapClient().queryForObject("user.getCvCountBySerialId", cvSerialId);
if (cvCount != 0) {
checkForDuplicateCVs(userId);
}
如果有人可以帮助我弄清楚在Java程序中使用递归的影响以及它是好习惯还是坏习惯,我将不胜感激。 如果这是一个不好的做法,那么负面影响是什么。
递归本身并不坏,实际上,它通常是设计算法的最佳方法。
就是说,在您的情况下,我会说这是糟糕的设计。 本质上,您有一个使用递归实现的while
循环。
这可能有一些问题:
while
循环来说,这是完全可以的,但是在您的情况下,最终将达到堆栈限制并引发异常。 这将使您对递归的使用成为一个错误,我认为该错误会带来安全隐患(拒绝服务)。 while
循环和递归实现,它的while
循环,你会看到一个大的性能差距。 在某些情况下(即尾部递归)可以优化此方法,但并非总是如此。 (此影响在您的代码中可以忽略不计,因为数据库查询要比函数调用开销贵得多) 递归的唯一弊端是,如果函数将自己多次调用(您可以使用JVM参数修改堆栈大小),则可能会收到StackOverflowException。 请注意,递归始终可以用简单的while循环替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.