java捕获堆栈溢出,获取消息显示和返回问题

标签 java recursion exception stack-overflow

所以我使用这种递归方法通过递归加法来计算两个数字的乘积。我知道大数字会溢出堆栈,我的目的是捕获堆栈溢出异常,这样程序就不会崩溃。但是,我不明白为什么输出消息在同一行中显示多次,并且 return 0 永远不会从方法中传递出去。返回 0 并不那么重要,我被迫有一个 return 语句。但我返回的不是 0,而是看似随机的大数字。
我希望它只显示一次消息并将我的值传回,或者更好的是终止方法并仅返回消息。有什么想法吗?

方法如下:

public static long multiplicationRecursive(long num1, long num2) {

    try {
        if (num2 == 0) {
            return 0;
        } else {
            return num1 + multiplicationRecursive(num1, num2 - 1);
        }
    } catch (StackOverflowError e) {
        System.out.println("Recursion failed");
        return 0;
    }
}

最佳答案

您只需在第一次调用该方法时捕获错误一次(并从递归方法中删除 try/catch):

long result = 0L;
try {
    result = multiplicationRecursive(num1, num2);
} catch (StackOverflowError e) {
    System.out.println("Recursion failed");
    result = 0L;
}

您的方法的问题在于,异常会被捕获,但随后该方法会正常退出并返回到递归调用它的位置,从而有效地返回一个虚假值。

关于java捕获堆栈溢出,获取消息显示和返回问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234241/

相关文章:

java - spring-retry Retryble 注释与 retryTemplate

java - 在java中转换ssh key

c - 将 X 转换为 Y 的步骤数。(整数)

c++ - 递归函数参数中前后递减的区别

android - 如何解决Android Studio中的错误 “FAILURE:Build failed with an exception”?

java - Tomcat 是在收到 post body 之前还是之后调用 servlet 的 doPost 方法?

java - 跟踪频率时线程安全哈希表放置的可扩展模式

java - 使用递归求平方根(牛顿算法)

java - 为什么在对象和 vector 之间进行选择时,Java 的多态性无法捕捉到正确的方法?

C#、NUnit : How to deal with testing of exceptions and deferred execution