【C语言】通过解题进一步理解并联系函数递归(斐波那契数列)-创新互联
关于函数递归,我认为应该是C语言函数板块中比较难理解以及需要多训练的板块了。
专注于为中小企业提供成都做网站、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业河东免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。在本篇文章中,我将通过解答斐波那契数列问题,进一步阐述函数的递归。
斐波那契数列维基百科中对斐波那契数列的解释为:
通俗一点讲就是一组数列,前两个数都为1,从第三个数开始,前两个数之和为下一个数的值。
即1,1,2,3,5,8,13,21,34,55,89……
本文将介绍三种方式对其进行解答
(一)函数递归的方法(有缺点,但是易理解)//不考虑溢出
#includeint num(int x)
{
if (x == 3)
{
count++;
}
if (x< 3)
{
return 1;
}
else
{
return (num(x-1) + num(x -2));
}
}
int main()
{
int a = 0;
scanf_s("%d", &a);
printf("%d\n", num(a));
return 0;
}
通过输入一些不大的整型数字,可以验证这种写法是正确的。
但是当输入一些数值较大的数时就会发现,程序运行时间很长,并且在输入更大数字时,会出现程序崩溃的现象。
是因这种程序写法十分繁杂,过程很繁琐,并且多次重复运用调用。
我们可以改动代码验证这个假想
#includeint count = 0;
int num(int x)
{
if (x == 3)
{
count++;
}
if (x< 3)
{
return 1;
}
else
{
return (num(x-1) + num(x -2));
}
}
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d\n%d\n", num(a),count);
return 0;
}
输出count值便可以知道仅第三个数就调用了大量多次。
所以我们可以采用不递归的方法进行编写程序
(二)非函数递归的方法#includeint num(int x)
{
int y = 1;
int z = 1;
int r = 0;
int c = 0;
if (x< 3)
{
return 1;
}
else
{
while (c<(x-2))
{
r = y;
y += z;
z = r;
c++;
}
return y;
}
}
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d\n", num(a));
return 0;
}
在这个程序写法中就并非利用了函数递归的方法,而是采用了循环语句,使得程序更加简单并且可行性提高。
(三)维基百科上的采用C语言对于斐波那契数列的解法作者在搜索斐波那契数列在维基百科上的注释时,注意到维基百科对于斐波那契数列在C语言程序编写中,进行了介绍。
1.通项公式法#include#includeint main()
{
int n;
double constant_a = (1 + sqrt(5)) / 2;
double constant_b = (1 - sqrt(5)) / 2;
double constant_c = sqrt(5) / 5;
double value_1 = 0;
int value_2 = 0;
scanf("%d", &n);
if(n >0)
{
for (int i = 0; i< n; i++)
{
value_1 = constant_c * (pow(constant_a, i) - pow(constant_b, i));
value_2 = (int)value_1;
printf("%d\n", value_2);
}
return 0;
}
else
{
return -1;
}
}
2.阵列版#include#includeint main()
{
int n,s,L;
printf("輸入長度");
scanf("%d",&L);
while(L<0)
{
printf("錯誤");
return 0;
}
int a[L];
int x=1,y=2;
a[0]=x;
a[1]=x;
a[2]=y;
for(n=3;n
如果读者学有余力的话,可以再次深入了解这两段程序的写法,可以进一步熟知这个知识点,加深印象。
通过对斐波那契数列程序的编写,相信大家进一步理解了C语言函数递归的知识点了,多加练习,方能熟练。“无他,惟手熟尔”。
个人愚见,望交流学习!! 转载请注明出处
学习是一个需要不断进步不断前进的过程!!希望作者能与读者一起坚持向前!!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:【C语言】通过解题进一步理解并联系函数递归(斐波那契数列)-创新互联
文章地址:http://ybzwz.com/article/dihshs.html