递归 内存溢出 算法问题

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;
}

}

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