所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
它的特点是,一个过程运算中再次用到该过程。
他的思路是,从后往前推理。
所谓迭代,就是通过循环不断重复一个过程,这个过程是一个或若干个旧值通过该过程获得一个或若干个新值的过程,而得到的新值又充当下一个相同过程的旧值,直到循环得到自己期望的结果。循环执行一次过程就是一次迭代。迭代不是循环,迭代需要用到循环。
它的特点是,一个过程结束后再次进行该过程。 它的思路是,从前往后推理。
迭代与递归:
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);
}