初学C语言3.4-递归,生存期和存储类型

生存期
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值