在讲解递归函数之前我们先了解一下栈堆
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210422165405198.jpg)
单独讲栈堆是数据结构
-
栈:后进先出的一种数据结构
-
堆:排序后的一种树状数据结构
栈区堆区是内存空间
-
栈区:按照后进先出的数据结构(栈),无论创建或销毁都是自动为数据分配内存,释放内存(系统自动做的)
-
堆区:按照排序后的树状数据结构(堆),可优先取出必要数据,无论创建或销毁都是手动分配内存,释放内存(程序员手动做的)
-
内存中的栈区: 自动分配 自动释放
-
内存中的堆区: 手动分配 手动释放
运行程序时在内存中执行,会因为数据类型的不同而在内存的不同区域运行,因不同语言对内存划分的机制不一,但大体来讲,有如下四大区域:
-
栈区:分配局部变量空间。
-
堆区:是用于手动分配程序员申请的内存空间。
-
静态区(全局栈区):分配静态变量,全局变量空间。
-
代码区(只读区,常量区):分配常量和程序代码空间的。
栈区 堆区 静态区 代码区 都是内存中的一段空间
1.递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n
,用函数func(n)
表示,可以看出:
func(n)=n!=1×2×3×⋅⋅⋅×(n−1)×n=(n−1)!×n=func(n−1)×n
所以,func(n)
可以表示为n x func(n-1)
,只有n=1时需要特殊处理。
于是,func(n)
用递归的方式写出来就是: