PTA:是否是斐波那契家族的一员?

是否是斐波那契家族的一员?

在数学上,斐波纳契数列以如下被以递归的方法定义:

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…,即
在这里插入图片描述

大自然的形成与这种美学有着较大的关联:
20200321151837_79195.jpg
了解完这个数列后,现在需要你进一步通过编程熟悉斐波那契数列:

给定一个正整数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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值