Exception in thread "main" java.lang.StackOverflowError .
package 折半递归非递归;
public class RecursiveTest {
/** * 递归实现 * * @param n * @return */
public static double recursive(long n) {
if (n == 1) {
return Math.log(1);
}
else {
return Math.log(n) + recursive(n - 1);
}
}
/** * 非递归实现 * * @param n * @return */
public static double directly(long n) {
double result = 0;
for (int i = 1; i <= n; i++) {
result += Math.log(i);
}
return result;
}
public static void main(String[] args) {
int i = 5000000;
long test = System.nanoTime();
long start1 = System.nanoTime();
double r1 = recursive(i);
long end1 = System.nanoTime();
long start2 = System.nanoTime();
double r2 = directly(i);
long end2 = System.nanoTime();
System.out.println("recursive result:" + r1);
System.out.println("recursive time used:" + (end1 - start1));
System.out.println("non-recursive result:" + r2);
System.out.println("non-recursive time used:" + (end2 - start2));
}
}
运行后JAVA控制台输出:
Exception in thread "main" java.lang.StackOverflowError
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
请问如何解决
public class RecursiveTest {
/** * 递归实现 * * @param n * @return */
public static double recursive(long n) {
if (n == 1) {
return Math.log(1);
}
else {
return Math.log(n) + recursive(n - 1);
}
}
/** * 非递归实现 * * @param n * @return */
public static double directly(long n) {
double result = 0;
for (int i = 1; i <= n; i++) {
result += Math.log(i);
}
return result;
}
public static void main(String[] args) {
int i = 5000000;
long test = System.nanoTime();
long start1 = System.nanoTime();
double r1 = recursive(i);
long end1 = System.nanoTime();
long start2 = System.nanoTime();
double r2 = directly(i);
long end2 = System.nanoTime();
System.out.println("recursive result:" + r1);
System.out.println("recursive time used:" + (end1 - start1));
System.out.println("non-recursive result:" + r2);
System.out.println("non-recursive time used:" + (end2 - start2));
}
}
运行后JAVA控制台输出:
Exception in thread "main" java.lang.StackOverflowError
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
请问如何解决
...全文
相关推荐
Java中Error与Exception的区别.doc
java.lang.Error java.lang.OutOfMemoryError java.lang.StackOverflowError java.lang.Exception java.io.IOException
java编程常见问题
**java.lang.StackOverflowError**: 当递归调用过深导致堆栈溢出时,会抛出这个错误。这通常意味着一个函数或方法在调用自身时没有正确的退出条件。
Java 异常处理 | 菜鸟教程.pdf
所有的异常类都是从 java.lang.Exception 类继承来的子类。Exception 类是 Throwable 类的子类。
Java提高篇——Java异常处理
Java异常的层次结构以java.lang.Throwable为根,其下分为Error和Exception两个主要分支。
常见java异常.txt
**NullPointerException(空指针异常)** - 类层次结构:java.lang.Object -> java.lang.Throwable -> java.lang.Exception


