标题:关于fibonacci数列的一道题
只看楼主
kakawei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-10-29
 问题点数:0 回复次数:10 
关于fibonacci数列的一道题
各位帮忙看一下,下面这个程序有逻辑错误吗?
f(n)是fibonacci数列,当输入一个数x,且f(n)〈x〈f(n+1)时,输出n
否则输出-1。
但是当我输入3,5,7。。。这些属于该数列的数时,本应该输出-1,但是结果并不是
#include<iostream>
#include<cmath>
using namespace std;
double fib(unsigned long);
int main()
{
for(int i=1;;i++)
{
unsigned long num;
cin>>num;
if(num>=1&&num<=pow(2.,31))
{
for(unsigned long j=0;;j++)
{
if(fib(j+1)<=num)
continue;
else if(fib(j+1)>num&&fib(j)<num)
{cout<<j<<endl;break;}
else if(fib(j)>=num)
{cout<<-1<<endl;break;}
}
}
}
system("pause");
}
double fib(unsigned long number)
{
return (pow((1+sqrt(5.))/2.,static_cast<double>(number+1))-pow((1-sqrt(5.))/2.,static_cast<double>(number+1)))/sqrt(5.);
}

搜索更多相关主题的帖子: fibonacci 
2007-11-11 17:37
jonc
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-3-25
得分:0 
#include<iostream>
#include<cmath>
using namespace std;
int fib(int);
int main()
{
for(int i=1;;i++)
{

int num;
cin>>num;
// cout<<fib(num);
if(num>=1&&num<=pow(2,31))
{
for(int j=0;;j++)
{
if(fib(j+1)<=num)
continue;
else if(fib(j)<num)
{
cout<<j+1<<endl;
break;
}
else if(fib(j)>=num)
{
cout<<-1<<endl;
break;
}
}
}
return 0;
}
system("pause");
}
int fib(int number)
{
if((number==0)||(number==1))
return 1;
else
return fib(number-1)+fib(number-2);
}

菜鸟也想高飞
2007-11-12 14:54
kakawei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-10-29
得分:0 
递归我会啊,但我想用迭代,帮忙再看看吧

乱舞风云
2007-11-12 15:59
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
t=a;
a=b
b=t+b;


倚天照海花无数,流水高山心自知。
2007-11-12 16:10
kakawei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-10-29
得分:0 
看不明白能不能说详细一点,我想要迭代,而且通项我已经写出来了,就是程序有点问题。

乱舞风云
2007-11-12 23:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
我写的就是迭代啊.

while(num>t)
{
t=a;
a=b
b=t+b;
n++;
}


倚天照海花无数,流水高山心自知。
2007-11-12 23:47
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
得分:0 
you can use binary search --- f_n is increasing (and thus ordered).

Using the matrix multiplication technique to calculate f_n in O(lgn) time and then use binary search to search for x

Total time should be O(lgn).


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-11-13 09:56
kakawei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-10-29
得分:0 
6楼的强人:
while(num>t)
{
t=a;
a=b
b=t+b;
n++;
}
t,a,b,n都代表什么啊?说清楚点啊!

乱舞风云
2007-11-14 10:30
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
f(n)是fibonacci数列,当输入一个数x,且f(n)〈x〈f(n+1)时,输出n

while(num>t)//t=f(n),num=x,b=f(n)
{
t=a;
a=b
b=t+b;
n++;
}//循环结束时n就是你要的结果

这就是迭代.



倚天照海花无数,流水高山心自知。
2007-11-14 11:32
kakawei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-10-29
得分:0 
如果输入一个num=f(n)的,你的迭代得出的n就不满足f(n)〈x〈f(n+1),
而且b放在这里有什么用啊?

乱舞风云
2007-11-14 21:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-185280-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.187105 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved