生存期
C语言的变量有两种生存期
- 静态存储期
- 自动存储期
- 具有文件作用域的变量属于静态存储期,函数也属于静态存储期。属于静态存储期的变量在程序执行期间将一直占据存储空间,直到程序关闭才释放。
- 具有代码块作用域的变量一般情况下属于自动存储期。代码块结束时自动释放存储空间
存储类型
五种不同的存储类型
- auto(自动变量):在代码块中声明的变量默认的存储类型就是自动变量,用auto来描述
- register(寄存器变量):当变量声明为寄存器变量,那么就没办法通过取址运算符获得该变量地址
- static(静态局部变量):将局部变量指定为静态局部变量
- extern
- typedef
递归
实现递归的两个基本条件:
- 调用函数本身
- 设置正确的结束条件
简单的递归举例
#include <stdio.h>
#pragma warning(disable:4996)
void recursion(void);
void recursion(void) { //核心递归思路
static int count = 10;
printf("hi!\n");
if (--count) {
recursion();
}
}
int main(void) {
recursion();
return 0;
}
递归求阶乘
例如所给数为5,则阶乘为12345,得到的积为120,即120为5的阶乘。
#include <stdio.h>
#pragma warning(disable:4996)
long fact(int num);
long fact(int num) {
long result;
if (num > 0) {
result = num*fact(num - 1);
}
else {
result = 1;
}
return result;
}
int main(void) {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
printf("%d的阶乘:%d\n", num, fact(num));
return 0;
}