怎么编写代码能够显示出完整的fibonacci数列

dingdingdao2 2011-07-22 08:51:09
#include<iostream>
#include<vector>
using namespace std;
int Fibonacci(int);
unsigned int n;
int main()
{
cout<<"此程序求解的是Fibonacci数列。请输入你要求解的n(max(n)=46):";
cin>>n;
cout<<endl<<" Fibonacci("<<n<<")="<<Fibonacci(n)<<endl;
return 0;
}
int Fibonacci(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);

}
上面的那个只能显示最后的结果,我想把整个从n==0到n的数列显示到屏幕上应该怎么编写代码啊?
...全文
270 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-07-28
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
char a3[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,L,z,n;
void main(void) {
strcpy(a1,"1");
printf(" 1 1\n");
strcpy(a2,"1");
printf(" 2 1\n");
n=3;
while (1) {
L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}

z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
sprintf(a3,"%d",v3[i]);
z=1;
}
} else {
sprintf(a3,"%s%d",a3,v3[i]);
}
}
if (z==0) sprintf(a3,"0");

printf("%4d %s\n",n,a3);
n++;
if (strlen(a3)>=MAXLEN-2) break;
strcpy(a1,a2);
strcpy(a2,a3);
}
}
stein42 2011-07-27
  • 打赏
  • 举报
回复
返回之前打印一遍就可以了。

这样还能看到为什么这样写效率低下了。
赵4老师 2011-07-27
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
davenky 2011-07-27
  • 打赏
  • 举报
回复
用一个while(tue){}无限循环就可以了,不过fibonacci是无限数列,不可能完整显示的。
机智的呆呆 2011-07-23
  • 打赏
  • 举报
回复
模板元编程啊,百度一下吧,基本会拿Fibonacci做例子的
dingdingdao2 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhao4zhong1 的回复:]
C/C++ code

#include <stdio.h>
unsigned __int64 a,b,c;
int i,n;
void main() {
n=93;
a=1ui64;
b=1ui64;
printf(" 1 1\n 2 1\n");
for (i=3;i<=n;i++) {
c=a+b;
……
[/Quote]
其实我的意思是在我的代码上递归代码上实现输出的(不增加额外的函数),非递归的方法我会的说
赵4老师 2011-07-22
  • 打赏
  • 举报
回复
#include <stdio.h>
unsigned __int64 a,b,c;
int i,n;
void main() {
n=93;
a=1ui64;
b=1ui64;
printf(" 1 1\n 2 1\n");
for (i=3;i<=n;i++) {
c=a+b;
printf("%3d %I64u\n",i,c);
a=b;
b=c;
}
}
// 1 1
// 2 1
// 3 2
// 4 3
// 5 5
// 6 8
// 7 13
// 8 21
// 9 34
// 10 55
// 11 89
// 12 144
// 13 233
// 14 377
// 15 610
// 16 987
// 17 1597
// 18 2584
// 19 4181
// 20 6765
// 21 10946
// 22 17711
// 23 28657
// 24 46368
// 25 75025
// 26 121393
// 27 196418
// 28 317811
// 29 514229
// 30 832040
// 31 1346269
// 32 2178309
// 33 3524578
// 34 5702887
// 35 9227465
// 36 14930352
// 37 24157817
// 38 39088169
// 39 63245986
// 40 102334155
// 41 165580141
// 42 267914296
// 43 433494437
// 44 701408733
// 45 1134903170
// 46 1836311903
// 47 2971215073
// 48 4807526976
// 49 7778742049
// 50 12586269025
// 51 20365011074
// 52 32951280099
// 53 53316291173
// 54 86267571272
// 55 139583862445
// 56 225851433717
// 57 365435296162
// 58 591286729879
// 59 956722026041
// 60 1548008755920
// 61 2504730781961
// 62 4052739537881
// 63 6557470319842
// 64 10610209857723
// 65 17167680177565
// 66 27777890035288
// 67 44945570212853
// 68 72723460248141
// 69 117669030460994
// 70 190392490709135
// 71 308061521170129
// 72 498454011879264
// 73 806515533049393
// 74 1304969544928657
// 75 2111485077978050
// 76 3416454622906707
// 77 5527939700884757
// 78 8944394323791464
// 79 14472334024676221
// 80 23416728348467685
// 81 37889062373143906
// 82 61305790721611591
// 83 99194853094755497
// 84 160500643816367088
// 85 259695496911122585
// 86 420196140727489673
// 87 679891637638612258
// 88 1100087778366101931
// 89 1779979416004714189
// 90 2880067194370816120
// 91 4660046610375530309
// 92 7540113804746346429
// 93 12200160415121876738
dingdingdao2 2011-07-22
  • 打赏
  • 举报
回复
我要去的显示界面是

请输入n:10
0 1 1 2 3
5 8 13 21 34
fibonacci(10)=34
shaotine_wu 2011-07-22
  • 打赏
  • 举报
回复
不能用for循环打印嘛。
如果想要用非递归,可以参考
http://blog.sina.com.cn/s/blog_6d11f7190100m416.html
zhangyuehua123 2011-07-22
  • 打赏
  • 举报
回复

/********************************************************************
** 函数名称: Fabonacci()
** 作 者: zyh
** 版 本: 1.0.0
** 日 期: 2011-6-8
** 功能描述: 用递归法求Fabonacci数列,输入一个整数,返回long int型的结果值
** 被本函数调用的函数清单: 无
** 调用本函数的函数清单: 1. main()
** 被访问的表: 无
** 被修改的表 : 无
** 输 入: int input_number,一个int型的整数,范围为1~正无穷(理论上),
随着输入值的增大,计算时间会显著增加
** 输 出: 无
** 返 回 值: Fabonacci数列计算结果,long int型
** 其 他: Fabonacci数列:1 1 2 3 5 8 13 21 34 …,从第三项起,结果为该数前两个数之和,递归式为:
F_1 = 1 (n=1)
F_2 = 1 (n=2)
F_n = F_n-1 + F_n-2 (n>=3)
** 修改历史:

1. 修改时间:
修 改 者:
版 本:
修改简述:
2. ......
********************************************************************/

long int Fabonacci(int input_number)
{ /* 在递推式中,一定要把if和else层层对应起来,才能找到迭代出口,结果才能正确 */

long int result_fabonacci;

if ((input_number == 1) || (input_number == 2))
{
result_fabonacci = 1;
}
else
{
result_fabonacci = Fabonacci(input_number - 1) + Fabonacci(input_number - 2); /* 递归调用 */
}

return result_fabonacci; /* 只用一个return语句 */

}

独酌逸醉 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 icechenbing 的回复:]

这个比较简单,LZ自己想想,不使用递归可以实现。

Fibonacci数列中的某个数等于它前面两个数之和!
[/Quote]
非递归效率更高哦!
恨天低 2011-07-22
  • 打赏
  • 举报
回复
这个比较简单,LZ自己想想,不使用递归可以实现。

Fibonacci数列中的某个数等于它前面两个数之和!

64,654

社区成员

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

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