我编写了一个示例Java类,并在方法中将recursion用于特定目的。我已经在下面显示了特定递归方法的代码(请注意,我在这里只提到了方法中所需的部分)。
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程序中使用递归的影响以及这是一个好习惯还是坏习惯,我们将不胜感激。如果这是一个不好的做法那么负面影响是什么。
答案 0 :(得分:3)
递归本身并不坏,实际上它通常是设计算法的最佳方式。
那就是说,在你的情况下,我会说这是糟糕的设计。你基本上有一个while
循环,你用递归实现。
这有一些可能的问题:
while
循环来说非常好,但在你的情况下最终会达到堆栈限制并抛出异常。这会使你使用递归成为一个错误,我认为这个错误具有安全隐患(拒绝服务)。while
循环的执行时间和该while
循环的递归实现,您将看到较大的性能差距。在某些情况下(即尾递归)可以优化它,但并非总是如此。 (这种影响在您的代码中可以忽略不计,因为数据库查询远比函数调用开销贵得多)答案 1 :(得分:-2)
递归的唯一黑暗的一面是,如果你的函数会调用很多次(你可以用JVM参数修改堆栈大小),你可能会得到一个StackOverflowException。请注意,递归可能总是被简单的while循环替换。