今天也是学习了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万次,这样会使代码的效率非常低
但是,当我将自定义函数Fib改为循环方式时,输出斐波那契数的效率就会非常高。
总结一下,我们如何使用递归与迭代和循环语句。在本质上,两者都是循环语句,从代码的书写上还是递归和迭代更加简单,但是会出现很多重复的数据;而循环语句就不会出现这样的问题,循环语句可以更加快速的运转我们的代码,大大节约了系统的运转时间。