C-----递归与迭代(递归求n!和求第n个斐波那契数)

所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
它的特点是,一个过程运算中再次用到该过程。
他的思路是,从后往前推理。


所谓迭代,就是通过循环不断重复一个过程,这个过程是一个或若干个旧值通过该过程获得一个或若干个新值的过程,而得到的新值又充当下一个相同过程的旧值,直到循环得到自己期望的结果。循环执行一次过程就是一次迭代。迭代不是循环,迭代需要用到循环。
它的特点是,一个过程结束后再次进行该过程。 它的思路是,从前往后推理。


迭代与递归:
1.递归中一定有迭代,迭代中不一定有递归。
2.能用迭代就别用递归。递归容易造成溢出​。

**

(1)递归求n!:


#include<stdio.h>
//编写一个函数求n!
int Fac(int n) {
	if (n<=1) {
		return 1;
	}
	else {
		return n * Fac(n-1);
	}
}
int main() {
	int n = 0;
	printf("请输入n的值:");
	scanf("%d",&n);
	int jieguo = Fac(n);
	printf("n!=%d",jieguo);
}

**

2)求第n个斐波那契数:递归的话会栈溢出(stack overflow),迭代反而更简单


#include<stdio.h>
//编写一个函数求第n个斐波那契数
int Fib(int n) {//先看看递归   会出现stack overflow 栈溢出  并且用递归算这个函数耗时很长
	if (n<=2) {
		return 1;
	}
	else if(n>2){
		return Fib(n-1) + Fib(n+2);
	}
}
int Fib1(int n) {//迭代
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2) {
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main() {
	int n = 0;
	printf("请输入斐波那契数的项数n:\n");
	scanf("%d",&n);
	int jieguo = Fib1(n);
	printf("第%d个斐波那契数为%d\n",n,jieguo);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值