是否是斐波那契家族的一员?
在数学上,斐波纳契数列以如下被以递归的方法定义:
F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
这个数列有着一个非常重要的美学特性:当n趋向于无穷大时,前一项与后一项的比值越到后面越来越逼近黄金分割率即f(n)/f(n-1)→1.618…,即
大自然的形成与这种美学有着较大的关联:
了解完这个数列后,现在需要你进一步通过编程熟悉斐波那契数列:
给定一个正整数N(N>1),输出其位于斐波那契数列中的第几项。如果不存在于数列则输出-1。在此我们规定数列的第一项是F(1)=1,第二项F(2)=1,……。
注:此题建议大家使用函数来进行模块化编程,例如:
void generate() //产生斐波那契数列
{
}
bool judge(int x) //判断一个数x是否在数列中
{
}
int main() //主函数
{
return 0;
}
输入格式:
一行,正整数N,(1<N<=1000000)
输出格式:
N位于第几项,如果不存在于数列中,输出-1
输入样例:
样例输入1:
2
样例输入2:
8
输出样例:
样例输出1:
3
样例输出2:
6
代码示例(仅供参考):
#include<stdio.h>
int f(int n)
{
int fei;
if(n==1)
{
fei=0;
}
if(n==2)
{
fei=1;
}
if(n>=3)
{
fei=f(n-1)+f(n-2);
}
return fei;
}
int main()
{
long int t,n,x;
scanf("%ld",&x);
long int i;
for(i=1;i<=33;i++)
{
if(x==f(i))
{
printf("%d",i-1);
break;
}
else if(i==33)
{
printf("-1");
break;
}
}
return 0;
}