小鹏AI 2017-11-15 12:21 采纳率: 100%
浏览 1525

递归 内存溢出 算法问题

import java.util.*;

public class Main {

public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
        Long n = sc.nextLong();
        sum(n);
        System.out.println(sum(n));
    }
}

public static Long sum(Long n) {
    Long add = 0l;
    if (n == 1l)
        return 1l;
    else
        add = n + sum(n - 1);
    return add;
}

}

  • 写回答

1条回答 默认 最新

  • 小鹏AI 新星创作者: 人工智能技术领域 2017-11-15 12:30
    关注

    参数保存在当前线程的栈Stack中,而不是保存在堆Heap中。
    Java虚拟机默认的Heap大小是128M。
    每一个线程,默认的栈大小只有512KB。
    所以,Java不能支持过多层次的递归调用。
    可以加上参数
    Java -Xss32m digui1来设置线程的Stack的大小

    评论

报告相同问题?