// 第 12 周 – Go 中的递归深度：栈会动态增长（默认最多 1 GB）
// 运行：go run ./w12/stackdepth
package main

import "fmt"

func sumTo(n int64) int64 {
	if n == 0 {
		return 0
	}
	return n + sumTo(n-1)
}

func main() {
	fmt.Println("sumTo(5000) =", sumTo(5000))
	// 在 Java 中这会引发 StackOverflowError；在 Go 中 goroutine 的栈会自动增长
	fmt.Println("sumTo(1 000 000) =", sumTo(1_000_000))
	// 无穷递归在 Go 中也会崩溃（"goroutine stack exceeds 1000000000-byte limit"），
	// 而且无法捕获 – 所以这里不运行它。
	fmt.Println("Iteratively it is always safe: n·(n+1)/2 =", int64(1_000_000)*1_000_001/2)
}
