2013-10-12 69 views
-7

我试图制作一个程序,将0到所输入数字的所有斐波那契数字都输出,但是有一个错误,我没有找到它......它编译。如果有人能告诉我我的错在哪里,这将非常有帮助;)。在打印无尽0000斐波那契数字从0到n

#include <iostream> 
int main() 
{ 
int n,erste = 0,zweite = 1,neu = 0; 
std::cout << "Enter N "; 
std::cin >> n; 


for(int s = 0 ;s < n; s++) 
{ 

if(s <= 1) 
    s = neu; 
    else{ 
    neu = erste + zweite; 
    erste = zweite; 
    zweite = neu; 
    } 

    std::cout << neu << " "; 

    }} 
+1

至少你可以做的是解释你有错误。 – SJuan76

+0

顺便说一下,这是第一次有人告诉斐波那契数列从'0'开始。 – SJuan76

+0

@ SJuan76如果你定义F_0 = 0,F_1 = 1作为起始条件,那么你会得到很好的属性,例如当k是5的倍数时F_k是5的倍数。 – madth3

回答

4
new = 0; 
for(int s = 0 ;s < n; s++) 
    if(s <= 1) 
    s = neu; 

在每次迭代你的索引设置为0,难怪循环还没有结束。

作为一个经验法则,避免为for的变量变量赋值(如果它是while,不要忘记更改值)。

+7

哦,并学会使用调试器(即使是穷人的调试器,打印到控制台)。 – SJuan76

+0

在报告中?或在哪里? – lordgregg

+0

如果您使用'for'循环,请不要更改循环内的变量值(如果需要,请使用'while'循环) – SJuan76

1

如果s < = 1,则将s赋值为0。由于s初始化为零并且是循环计数器,它将始终为零,并且循环将是无限的。

0

故障很容易辨别。我很努力去理解为什么你犯了你的错误。但无论如何,这是更好的,至少它不会永远循环。

#include <iostream> 
int main() 
{ 
int n,erste = 0,zweite = 1,neu = 0; 
std::cout << "Enter N "; 
std::cin >> n; 

for(int s = 0 ;s < n; s++) 
{ 

    neu = erste + zweite; 
    erste = zweite; 
    zweite = neu; 

    std::cout << neu << " "; 

    } 
} 
+0

感谢您的解决方案;我的错误很可能是因为我希望n是一个数字,我希望所有的斐波那契数字都是这个数字,例如,如果我输入数字12,我想要0 0 1 1 2 5 7 – lordgregg

+0

好吧,但这不是什么你的代码是。你需要一个'while'循环,并且你需要循环直到斐波那契数字大于输入的数字。顺便说一下,斐波那契数列不是以两个零开头的。 – john

0

你在那里做的大部分都没有意义。看看一个正确的代码:

#include <iostream> 
using namespace std; 

int main() { 
    int a = 1, b = 1, c = 1, n; 
    cin >> n; 
    cout << "1 "; 
    if (n >= 2) 
     cout << "1 "; 

    for (int i = 3; i <= n; ++i) { 
     a = b; 
     b = c; 
     c += a; 
     cout << c << ' '; 
    } 
}