今天也是学习了C语言中递归与迭代的使用方法,从学习中也是能感受到,递归语句更像是循环语句,但是他的结构更加简单,但可以将一个复杂的工程拆分成很多小的问题,逐一解决。

1.求n的阶乘

int Fac1(int n)//循环

{

int i = 0;

int ret = 1;

for (i = 1; i <= n; i++)

{

 ret*=i ;

}

return ret;

}

int Fac1(int n)//递归

{

if (n <= 1)

{

 return 1;

}

else

{

 return n*Fac1(n - 1);

}

}

int main()

{

int n = 0;

int ret = 0;

scanf("%d", &n);

ret = Fac1(n);//循环的方式

printf("ret=%d\n", ret);

return 0;

}

就拿上面的求n的阶乘来看,循环的方式去定义我们自己的函数,看起来非常好理解,但是如果我们去用递归的方式定义函数,写起来很简单,但如果我们要去给别人讲解我们的代码,就会出现很多复杂的过程。并且,我们在写递归语句的时候,一定要注意限制条件,递归语句很容易出现“stack,overflow”,也就是我们俗称的栈溢出。总结一下,递归就是将很多行的循环语句简写,并且,我们在使用过程中,一定要严格注意限制条件。

求第n个斐波那契数

int count = 0;

int Fib(int n)

{

if (n == 3)//求第n个斐波那契数时n==3被使用了多少次

{

 count++;

}

if (n <= 2)

{

 return 1;

}

else

{

 return Fib(n-1) + Fib(n - 2);

}

}

int main()

{

int  n = 0;

int ret = 0;

scanf("%d", &n);

ret = Fib(n);

printf("ret=%d\n", ret);

printf("count=%d\n", count);

return 0;

}

递归与迭代_递归与迭代

当我们运行代码时,想要求出第40个斐波那契数,从图中我们可以看出,我们要计算当n等于3时斐波那契数3900万次,这样会使代码的效率非常低

递归与迭代_递归与迭代_02

但是,当我将自定义函数Fib改为循环方式时,输出斐波那契数的效率就会非常高。

总结一下,我们如何使用递归与迭代和循环语句。在本质上,两者都是循环语句,从代码的书写上还是递归和迭代更加简单,但是会出现很多重复的数据;而循环语句就不会出现这样的问题,循环语句可以更加快速的运转我们的代码,大大节约了系统的运转时间。