C++斐波那契数列
C++ Fibonacci sequence
我正在尝试制作的程序应该计算并显示斐波那契数列的每个条目,直到第 40 个。
我相信就完成这项工作而言,我已经快到了。问题是:在数字 1 和 2 之后,序列似乎只是自我重置,并在序列中留下每个后续数字 1 的位置。
这是代码:
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i==1)
{
cout << i << " " << b << endl;
}
else if (i==2)
{
cout << i << " " << b*2 << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}
我对序列中的前几个数字进行了预编程,因为我无法让它们正常工作,但在这样做之后,它似乎会影响程序的其余部分。
代码的输出是这样的:
0 1
1 1
2 2
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
您忘记为第二种情况设置a
。
因此,当 b = 2
时,c
使用 a
的先前值,即 0
。
因此,c = a+b
= 0 + 2 = 2.
在第二种情况下设置a = 1
:
else if (i==2)
{
a = 1 // This
cout << i << " " << b*2 << endl;
}
看来我创建post后立即解决了这个问题。
我决定尝试将序列中的第一个条目 (0) 预编程为一个,并完全删除序列中的其他预编程部分。这解决了整个问题。
这是工作代码:
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i == 0)
{
cout << i << " " << b << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}
我预先设定了序列中的前几个数字..如果你想这样做,下面可能是另一种方法..
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
cout << 0 << " " << a << endl;//simply display the preprogrammed numbers
cout << 1 << " " << b << endl;
for (int i = 2; i < 40; ++i)//apply the formula for remaining elements
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
return 0;
}
尝试在您的程序中进行以下更改。
#include <iostream>
using namespace std;
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i==0)
{
cout << i << " " << a << endl;
}
else if (i==1)
{
cout << i << " " << b << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}
我正在尝试制作的程序应该计算并显示斐波那契数列的每个条目,直到第 40 个。
我相信就完成这项工作而言,我已经快到了。问题是:在数字 1 和 2 之后,序列似乎只是自我重置,并在序列中留下每个后续数字 1 的位置。
这是代码:
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i==1)
{
cout << i << " " << b << endl;
}
else if (i==2)
{
cout << i << " " << b*2 << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}
我对序列中的前几个数字进行了预编程,因为我无法让它们正常工作,但在这样做之后,它似乎会影响程序的其余部分。
代码的输出是这样的:
0 1
1 1
2 2
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
您忘记为第二种情况设置a
。
因此,当 b = 2
时,c
使用 a
的先前值,即 0
。
因此,c = a+b
= 0 + 2 = 2.
在第二种情况下设置a = 1
:
else if (i==2)
{
a = 1 // This
cout << i << " " << b*2 << endl;
}
看来我创建post后立即解决了这个问题。
我决定尝试将序列中的第一个条目 (0) 预编程为一个,并完全删除序列中的其他预编程部分。这解决了整个问题。
这是工作代码:
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i == 0)
{
cout << i << " " << b << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}
我预先设定了序列中的前几个数字..如果你想这样做,下面可能是另一种方法..
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 1;
cout << 0 << " " << a << endl;//simply display the preprogrammed numbers
cout << 1 << " " << b << endl;
for (int i = 2; i < 40; ++i)//apply the formula for remaining elements
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
return 0;
}
尝试在您的程序中进行以下更改。
#include <iostream>
using namespace std;
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 40; ++i)
{
if (i==0)
{
cout << i << " " << a << endl;
}
else if (i==1)
{
cout << i << " " << b << endl;
}
else
{
int c = a + b;
a = b;
b = c;
cout << i << " " << c << endl;
}
}
return 0;
}