什么是递归?递归的两个必要条件。满足两个必要条件递归就一定没问题?——C语言代码案例

本文介绍了递归的概念,强调了递归的两个必要条件:限制条件和逐步接近限制条件。通过示例代码展示了递归在计算阶乘和汉诺塔问题中的应用。然而,递归并非总能解决问题,例如在计算斐波那契数列时,由于重复计算导致效率低下。文章提醒读者在使用递归时要考虑其可能导致的栈溢出问题,并提供了一个递归计算阶乘的代码示例。
摘要由CSDN通过智能技术生成

一. 什么是递归?

所谓递归,说白了就是函数自己调自己(但不是简单的自己调自己!),一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

—————————————————————————————————————

二. 递归的两个必要条件

1. 存在 限制条件 ,当满足这个限制条件的时候,递归便不再继续 。

2.每次递归调用之后会越来越接近这个 限制条件 。

—————————————————————————————————————

三. 满足两个必要条件时,递归一定就没问题?(以下代码,两个条件都满足,但是会栈溢出!)

void test(int n) {
   if (n<10000) {
   	test(n + 1);
   }
}


int main() {
    test(1)return 0;
}

递归可以用来解决:汉诺塔,阶乘等问题~

求n的阶乘,代码实现。

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

用递归求第n的斐波那契数列(真的好吗?)

当我们求前几个的时候,计算机很快就帮算出了结果,那你试试45以后的数,是不是就计算机就算得特别慢。所以不要用递归去解决斐波那契数列问题。
int Fib(int n) {
	if (n==1 || n==2) {
		return 1;
	}else {
		return  Fib(n-1) + Fei(n-2);
	}
}

int main() {
		int n = 0;
		int ret = 0;
		scanf("%d", &n);
		ret = Fib(n);
		printf("%d", ret);
		return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值