递归原来是这么回事

简述递归

什么是递归:

程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接
调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问
题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程
序的代码量。
递归的主要思考方式在于:把大事化小

必要条件:

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。

下面通过做题,对递归有一个深刻的理解:

**题目1:**接受一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出 1 2 3 4

代码详情:

void nice(int n)
{
	if (n > 9)
	{
		nice(n / 10);
		printf("%d ", n % 10);
	}
	else
	{
		printf("%d ", n);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	nice(n);
	return 0;
}

结果:
在这里插入图片描述

思路图解:
在这里插入图片描述

**题目2:**递归实现求n的阶乘

代码详情:

int nice(int n)
{
	if (n == 0)
	{
		return 1;
	}
	else
	{
		return n * nice(n - 1);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = nice(n);
	printf("%d\n", ret);
	return 0;
}

结果:
在这里插入图片描述

思路图解:
在这里插入图片描述

注意:

当n的值过大时,会出现死递归的现象,这是栈溢出了。

调用函数是会在栈区开辟一个有限的空间,而每次递归时都会在这个空间内再次开辟一个小空间,因为空间是有限的,总有用完的时侯,所以当n值过大时,就会出现死递归。这个时候就可以考虑使用循环了

如下:

int nice(n)
{
	int ret = 1;
	while (n > 1)
	{
		ret = ret * n;
		n--;
	}
	return ret;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = nice(n);
	printf("%d\n", ret);
	return 0;
}

提醒:写代码不是字数越多越好、越难越好,重要的是能够简单快捷的解决我们的问题。

以上是我对递归的认识及理解,小子初学,如有错误还请各位大佬指正。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值