扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#includestdio.h
成都创新互联公司是一家集网站建设,固镇企业网站建设,固镇品牌网站建设,网站定制,固镇网站建设报价,网络营销,网络优化,固镇网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
//求斐波那契数列第n项
int fib(int n)
{
if(n == 0 || n == 1)
return 1;
else
return (fib(n-1)+fib(n-2));
}
int main()
{
int i,n;
printf("-----输入一个斐波那契数-----\n");
scanf("%d",n);
for(i=0;in;i++)
printf("%d\t",fib(i));
printf("\n");
return 0;
}
编译结果:
./a.out
-----输入一个斐波那契数-----
8
1 1 2 3 5 8 13 21
方法2:
#include stdlib.h
#include stdio.h
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2);
}
}
int main()
{
int n = 0;
int m=0;
int ret = 0;
printf("请输入要计算的斐波那契数列的前N项总数:");
scanf("%d", n);
m=n;
do
{
ret += Fibon1(n);
n--;
} while (n0);
printf("前%d项目和ret=%d", m,ret);
getchar();
getchar();
return 0;
}
运行结果:
方法4:
#include stdlib.h
#include stdio.h
int Fibon1(int n);
int main()
{
int n = 0;
int m=0;
int ret = 0;
printf("请输入要计算的斐波那契数列的前N项总数:");
scanf("%d", n);
m=n;
do
{
ret += Fibon1(n);
n--;
} while (n0);
printf("前%d项目和ret=%d", m,ret);
getchar();
getchar();
return 0;
}
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2);
}
}
运行结果:
斐波那契数列问题。这个与汉诺塔都属于来源来生活的比较典型的例子。
题目不难,主要是分析出兔子总数的每个月的变化规律然后编程就会非常简单了。
表达式为F[n]=F[n-1]+F[n-2](n=2,F[0]=0,F[1]=1),即前两项比较特殊,然后从第三项开始,值为前两项之和。如:0,1,1,2,3,5,8,13,21......
方法有多种,一般用递归比较简单明了。分析写在注释里了,有不懂的请追问。
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1; //如果n是1或者2,结果为1。
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2); //如果不是n不是1和2,那么调用Fibon1函数。
} //直到参数n变为2,即上述变为1+0.
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", n);
ret = Fibon1(n); //调用函数(递归)
printf("ret=%d", ret);
return 0;
}
1.int f1=0,f2=1,f3;
2.return f3;
继续写:f3=f1+f2;
f2=f3;
f1=f2;
//递归法
int fibo1(int n)
{
if( n == 1 || n == 2) return 1;
else return fibo1(n-1)+fibo1(n-2);
}
//递推法
int fibo2(int n)
{
int f0=1,f1=1,f;
if (n2)
return 1;
for(int i=2;in-1;i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
区别:递推是直接使用已知的条件去推出未知的条件;递归则是将大问题逐渐转化为若干个相同的子问题,直到得到已知的最小子问题,再回溯依次得到父问题的答案。是由未知到已知,再从已知到未知。对于复杂的问题,递归把问题简单化,读起来易懂。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流