赞
踩
递归函数是指在一个函数中直接或者间接调用函数本身。
例如,设一个无返回值函数为fun,同时,设置一个整形形参变量为a
-
- void fun(int a)
- {
- if(a>0)
- {
- fun(a-1);
- printf("%d\n",a);
- }
- }
-
-
此时,在fun函数中,就直接调用了fun函数本身。
上面的fun函数就是一个递归函数。
接下来,我们来讨论一下递归函数优点以及缺点
优点:
可以很简单的解决一些较难的问题;
下面举斐波那契数列求第n项的值的例子
相信大家都听说过斐波那契数列,特别是当它在数学题中出现时,真是十分的头疼,而现在,我们使用C语言中的递归函数就能很简单的解决这个问题,代码如下
-
- #include <stdio.h>
- #include <stdlib.h>
- int fun(int n) //n表示斐波那契数列的第n项
- {
- //斐波那契数列的第一项和第二项都是1
- if (1 == n||2==n)
- return 1;
- //从第三项开始,后一项是前两项的和
- else
- return fun(n - 1) + fun(n - 2);
- }
- int main(void)
- {
- int a=0;
- //输入要求的斐波那契数列的项数a
- printf("请输入斐波那契数列的项数:\n");
- scanf("%d", &a);
- //输出第a项斐波那契数列的值
- printf("%d", fun(a));
- system("pause");
- return 0;
- }
-
-

缺点
1.比较容易爆栈(可以理解为运行程序时占用内存空间过多,超出规定的内存空间,也可以简单的理解为会报错)
例如,就像上面的斐波那契数列一样,如果我们输入30000,此时就会爆栈(报错),是因为我们在求第30000项斐波那契数列的值时占用了过多的内存空间
所以,当我们在写一些追求效率的程序时,要谨慎使用递归函数
2.难于阅读,难于维护
例如本文章第一个代码块的程序
如果,我们要求fun(5),此时的代码展开是这样的,而这仅仅是一个简单的递归函数,只需要输出一个数字,且递归次数也不多,如果换了更复杂的函数,则它的阅读性更差,我们总不能每写一次递归函数就写一次程序图,读都读不懂,就更别说维护了
所以,递归函数,难于阅读,难于维护
这就是递归函数了,大家如果有兴趣,也可以尝试写一些其他的递归函数,比如n的阶乘,十进制整数变二进制函数等等。
谢谢大家的阅读,同时,如果大家看到我的博客中的不足与缺点,请尽快私信我,我会尽全力改正,大家对我的鞭策就是我坚持下的动力!
再次谢谢大家的阅读,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。