1. 递归指的是函数定义中调用函数本身的现象(自己调自己)
  2. 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
  3. 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
递归注意事项:
  1. 递归一定要有出口。否则内存溢出(出口:什么时候不再调用自己)
  2. 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出

递归求阶乘:

var s = 1

func main() {
	Demo11(5)
	fmt.Println(s)
}

func Demo11(num int) {
	if num == 1 {
		return // 终止函数的意思
	}
	s *= num
	Demo11(num - 1)
}