#include
#include
longfibonacci(long,int);
voidmain(void)
{
intn;
cout
cin>>n;
cout
if(fibonacci(n,1)==-1)cout
}
longfibonacci(longnumber,intout)
{
if(number
return-1;//returnerrormessage
elseif(number==0)
return0;
elseif(number==1)
{
if(out)
cout
return1;
}
else
{
longlVal;
if(out)
lVal=fibonacci(number-2,0)+fibonacci(number-1,1);
else
lVal=fibonacci(number-2,0)+fibonacci(number-1,0);
if(out)
cout
returnlVal;
}
}
扩展资料:
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,
像这样的:1、1、2、3、5、8、13、21、34、55......
今天,用四种方式来进行实现:
1.递归
intFibon1(intn)
{
if(n==1||n==2)
{
return1;
}
else
{
returnFibon1(n-1)+Fibon1(n-2);
}
}
intmain()
{
intn=0;
intret=0;
scanf("%d",&n);
ret=Fibon1(n);
printf("ret=%d",ret);
return0;
}
2.非递归
intFibno2(intn)
{
intnum1=1;
intnum2=1;
inttmp=0;
inti=0;
if(n
{
return1;
}
else
{
for(i=0;i>n-3;i++)
{
tmp=num1+num2;
num1=num2;
num2=tmp;
}
returntmp;
}
}
3.数组
publicintFibno3(intn)
{
List
list.fib(1);
list.fib(1);
intcount=list.Count;
while(count { list.fib(list[count-2]+list[count-1]); count=list.Count; } returnlist[count-1]; } 4.队列 publicintFibno4(intn) { Queue queue.Enqueue(1); queue.Enqueue(1); for(inti=0;i { queue.Enqueue(queue.AsQueryable().First()+queue.AsQueryable().Last()); queue.Dequeue(); } returnqueue.Peek(); } 参考资料: