递归的用法

递归的定义:程序调用自身的编程技巧。
递归一般用来将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。(即大事化小)
递归的两个必要条件:
(1)限制条件。即满足这个限制条件的时候,递归就不再继续了。
(2)每次递归调用后越来越接近这个限制条件。
例如:输入一个无符号整型值,按照顺序依次打印它的每一位。如:1234,输出1 2 3 4.

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//递归函数
void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	int num = 1234;
	print(num);
	return 0;
}

执行结果如下:
在这里插入图片描述
递归经典的例子就是斐波那契数,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//递归函数
int fib(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return fib(n - 1) + fib(n - 2);//第三个数为前两个数之和
	}
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	printf("%d\n", fib(num));
	return 0;
}

求第五个斐波那契数,执行结果如下:
在这里插入图片描述
但是递归在使用过程中,每往前递推一次产生一个新的递归数,系统就要给这个新的递归数分配空间,当递归的次数过多时,例如求第50个斐波那契数时,需要分配的空间过多,计算机不会很快的算出来,或需要很长的时间甚至算不出来,这时它就出现了栈溢出的情况。
例如,算斐波那契数中第三个数要求多少次,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//递归函数
int count = 0;
int fib(int n)
{
	if (n == 3)
		count++;
	if (n <= 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);//第三个数为前两个数之和
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	printf("第%d个斐波那契数是%d\n",num, fib(num));
	printf("第三个斐波那契数一共计算了%d次\n", count);
	return 0;
}

执行结果如下:
在这里插入图片描述
因此,在使用递归时,递归次数较少的可以使用,次数较多的就需要优化算法。当然,有能力的话自己写一个新的算法也是很不错的。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值