教你领悟函数递归的本质

1、何为递归

1.1:在C语言中,递归就是函数自己调用自己。递是指递推,归是指回归。

1.2:递推的两个必要条件

a: 递归存在限制条件,当满足限制条件时,递归便不再继续
b:每一次函数递归后都要越来越接近限制条件

1.3:递归的层次不能太深

每一次递归都是一次函数调用,需要向栈区申请空间(这块空间被称为运行时堆栈,也叫函数栈帧),存放函数调用期间各种局部变量的值,当递归的次数足够多时,就会将栈区的空间占满,出现栈溢出(statck overflow

1.3.1:递归的层次太深的错误示例

/*用递归的方式求n!   (n>=0)*/
long long  Fact(int n)
{
   
	if (n <= 1)/*限制条件*/
		return 1;
	else
		return n * Fact(n - 1);/*每一次递归都越来越接近限制条件*/
}

int main()
{
   
	long long n = 0;
	scanf("%lld", &n);
	printf("%lld\n", Fact(n));
	return 0;
}

在这里插入图片描述
当n的值比较大时,函数递归的次数也会很多,可能使得栈溢出。导致程序运行的结果不符合预期,或者程序直接崩溃了。
在这里插入图片描述

1.4递归的思想

把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到⼦问题不能再被拆分,递归就结束了

2、递归的示例(两种方法)

输⼊⼀个正整数m,按照顺序打印正整数的每⼀位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值