斐波那契

代码随想录
博客专家认证
2011-02-12 12:00:08
跪求斐波那契数列表,要从第1到第100的,或更大的也行,百度上中有1到20的。
...全文
405 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackBurd 2012-03-14
  • 打赏
  • 举报
回复
考虑到效率就用矩阵相乘,存储就用大数运算(或者只取余)。
Lactoferrin 2011-02-12
  • 打赏
  • 举报
回复
http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
前300的
Sidyhe 2011-02-12
  • 打赏
  • 举报
回复
自己敲几行代码看结果就是了,伸手伸到这个份上,你算可以啦
wandaoyongshi 2011-02-12
  • 打赏
  • 举报
回复
1,1,2,3,5,8,13,21,34,55,89,144,233
qq120848369 2011-02-12
  • 打赏
  • 举报
回复
你犀利了。
代码随想录 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lactoferrin 的回复:]
http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
前300的
[/Quote]
4楼的这个很给力啊!推荐大家使用啊
代码随想录 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 timelimitexceeded 的回复:]
斐波那契数列不是直接递推么。。
[/Quote]

这个一定要用高精度的,我算到60几的时候就不对了,所以才问的。
TimeLimitExceeded 2011-02-12
  • 打赏
  • 举报
回复
斐波那契数列不是直接递推么。。
xiaozhuhaoa 2011-02-12
  • 打赏
  • 举报
回复
只要设计个bignum就好了嘛~~~记得不要用递归解就没有问题了。
S_aladdin 2011-02-12
  • 打赏
  • 举报
回复
001 : 00000000000000000000000000000001
002 : 00000000000000000000000000000001
003 : 00000000000000000000000000000002
004 : 00000000000000000000000000000003
005 : 00000000000000000000000000000005
006 : 00000000000000000000000000000008
007 : 00000000000000000000000000000013
008 : 00000000000000000000000000000021
009 : 00000000000000000000000000000034
010 : 00000000000000000000000000000055
011 : 00000000000000000000000000000089
012 : 00000000000000000000000000000144
013 : 00000000000000000000000000000233
014 : 00000000000000000000000000000377
015 : 00000000000000000000000000000610
016 : 00000000000000000000000000000987
017 : 00000000000000000000000000001597
018 : 00000000000000000000000000002584
019 : 00000000000000000000000000004181
020 : 00000000000000000000000000006765
021 : 00000000000000000000000000010946
022 : 00000000000000000000000000017711
023 : 00000000000000000000000000028657
024 : 00000000000000000000000000046368
025 : 00000000000000000000000000075025
026 : 00000000000000000000000000121393
027 : 00000000000000000000000000196418
028 : 00000000000000000000000000317811
029 : 00000000000000000000000000514229
030 : 00000000000000000000000000832040
031 : 00000000000000000000000001346269
032 : 00000000000000000000000002178309
033 : 00000000000000000000000003524578
034 : 00000000000000000000000005702887
035 : 00000000000000000000000009227465
036 : 00000000000000000000000014930352
037 : 00000000000000000000000024157817
038 : 00000000000000000000000039088169
039 : 00000000000000000000000063245986
040 : 00000000000000000000000102334155
041 : 00000000000000000000000165580141
042 : 00000000000000000000000267914296
043 : 00000000000000000000000433494437
044 : 00000000000000000000000701408733
045 : 00000000000000000000001134903170
046 : 00000000000000000000001836311903
047 : 00000000000000000000002971215073
048 : 00000000000000000000004807526976
049 : 00000000000000000000007778742049
050 : 00000000000000000000012586269025
051 : 00000000000000000000020365011074
052 : 00000000000000000000032951280099
053 : 00000000000000000000053316291173
054 : 00000000000000000000086267571272
055 : 00000000000000000000139583862445
056 : 00000000000000000000225851433717
057 : 00000000000000000000365435296162
058 : 00000000000000000000591286729879
059 : 00000000000000000000956722026041
060 : 00000000000000000001548008755920
061 : 00000000000000000002504730781961
062 : 00000000000000000004052739537881
063 : 00000000000000000006557470319842
064 : 00000000000000000010610209857723
065 : 00000000000000000017167680177565
066 : 00000000000000000027777890035288
067 : 00000000000000000044945570212853
068 : 00000000000000000072723460248141
069 : 00000000000000000117669030460994
070 : 00000000000000000190392490709135
071 : 00000000000000000308061521170129
072 : 00000000000000000498454011879264
073 : 00000000000000000806515533049393
074 : 00000000000000001304969544928657
075 : 00000000000000002111485077978050
076 : 00000000000000003416454622906707
077 : 00000000000000005527939700884757
078 : 00000000000000008944394323791464
079 : 00000000000000014472334024676221
080 : 00000000000000023416728348467685
081 : 00000000000000037889062373143906
082 : 00000000000000061305790721611591
083 : 00000000000000099194853094755497
084 : 00000000000000160500643816367088
085 : 00000000000000259695496911122585
086 : 00000000000000420196140727489673
087 : 00000000000000679891637638612258
088 : 00000000000001100087778366101931
089 : 00000000000001779979416004714189
090 : 00000000000002880067194370816120
091 : 00000000000004660046610375530309
092 : 00000000000007540113804746346429
093 : 00000000000012200160415121876738
094 : 00000000000019740274219868223167
095 : 00000000000031940434634990099905
096 : 00000000000051680708854858323072
097 : 00000000000083621143489848422977
098 : 00000000000135301852344706746049
099 : 00000000000218922995834555169026
100 : 00000000000354224848179261915075
S_aladdin 2011-02-12
  • 打赏
  • 举报
回复
写了个大数版本的,可以输出100个


/*
* fibonacci.c
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NUM_LEN 32
#define CARRY 10

void calculateBigSum(int bigA[], int bigB[], int bigSum[])
{
int nIndex;

memset(bigSum, 0, MAX_NUM_LEN*sizeof(int));

for(nIndex = 0; nIndex < MAX_NUM_LEN; nIndex++)
{
bigSum[nIndex] += bigA[nIndex] + bigB[nIndex];

if(bigSum[nIndex] >= CARRY)
{
bigSum[nIndex] -= CARRY;
bigSum[nIndex+1]++;
}
}
}

void printBigNumber(int big[])
{
int nIndex;

for(nIndex = MAX_NUM_LEN - 1; nIndex >= 0; nIndex--)
printf("%d", big[nIndex]);
printf("\n");
}

void outputFibonacci(int fibonacci[3][MAX_NUM_LEN], int nIndex)
{
printf("%03d : ", nIndex+1);
printBigNumber(fibonacci[nIndex%3]);

calculateBigSum(fibonacci[nIndex%3], fibonacci[(nIndex-1)%3], fibonacci[(nIndex+1)%3]);
}


int main(int argc, char *argv[])
{
int fibonacci[3][MAX_NUM_LEN] = {0};
int nIndex = 0, nLoop;

fibonacci[0][0] = 1;
fibonacci[1][0] = 1;

if(argc != 2)
{
printf("Need a parameter.\n");
return -1;
}

nLoop = atoi(argv[1]);

printf("%03d : ", nIndex+1);
printBigNumber(fibonacci[nIndex%3]);

for(nIndex = 1; nIndex < nLoop; nIndex++)
outputFibonacci(fibonacci, nIndex);

return 0;
}
TimZhuFaith 2011-02-12
  • 打赏
  • 举报
回复
换成double 更大[Quote=引用 21 楼 s_aladdin 的回复:]
输出到93个以后就溢出了


C/C++ code

#include <stdio.h>
#include <stdlib.h>

void output_number(unsigned long long llNum[], int nIndex)
{
printf("%d : %llu\n", nIndex+1, llNum[nIndex%3]);
……
[/Quote]
xwfde 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lactoferrin 的回复:]

GNU MP库有无限精度,无限大的数计算功能
[/Quote]人,哪有无限的事?1000亿个脑细胞而已。
在计算机容量不计的情况下,最好的结果乃是这样,计算一个无限大的数需要的是无限长的时间
TimZhuFaith 2011-02-12
  • 打赏
  • 举报
回复
坐等更大的。。[Quote=引用 21 楼 s_aladdin 的回复:]
输出到93个以后就溢出了


C/C++ code

#include <stdio.h>
#include <stdlib.h>

void output_number(unsigned long long llNum[], int nIndex)
{
printf("%d : %llu\n", nIndex+1, llNum[nIndex%3]);
……
[/Quote]
Sidyhe 2011-02-12
  • 打赏
  • 举报
回复
我擦,怎么都教训我......
我只是想帮助一下楼主而已,别攻击我呀
我知道这样递归不好,只是图个方便而已
我是真的很无奈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 打赏
  • 举报
回复
都随便写写,没算出过那么大的,围观
S_aladdin 2011-02-12
  • 打赏
  • 举报
回复
输出到93个以后就溢出了


#include <stdio.h>
#include <stdlib.h>

void output_number(unsigned long long llNum[], int nIndex)
{
printf("%d : %llu\n", nIndex+1, llNum[nIndex%3]);
llNum[(nIndex+1)%3] = llNum[nIndex%3] + llNum[(nIndex-1)%3];
}


int main(int argc, char *argv[])
{
unsigned long long llNum[3] = {1 ,1, 0};
int nIndex, nLoop;

if(argc != 2)
{
printf("Need a parameter.\n");
return -1;
}

nLoop = atoi(argv[1]);
printf("1 : 1\n");

for(nIndex = 1; nIndex < nLoop; nIndex++)
output_number(llNum, nIndex);

return 0;
}
qq120848369 2011-02-12
  • 打赏
  • 举报
回复
的确很蠢,斐波那契还敢递归。
Sidyhe 2011-02-12
  • 打赏
  • 举报
回复
小是小了点,呵呵
我发现代码里有一个写错了,忘了
printf("\n计算时间:%d秒\n", (GetTickCount() - dwNow)/1000);
TimZhuFaith 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sidyhe 的回复:]
我自己敲了几行代码,当算到第47个的时候溢出了,我用的DWORD类型,不知道还有没有更大的,LARGE_INTEGER????
下面是结果:

001:1
002:1
003:2
004:3
005:5
006:8
007:13
008:21
009:34
010:55
011:89
012:144
013:233
014:377
015:610
016:987……
[/Quote]47太小了吧。。。
加载更多回复(13)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧