【问题标题】:How I do fibonaci sequence under 1000? [closed]我如何在 1000 以下做斐波那契数列? [关闭]
【发布时间】:2011-01-13 17:35:41
【问题描述】:
#include <iostream>
using namespace std;
void main()
{
  int i = 0;
  while (i < 1000)
  {
      int TEMP = i * 2;
      cout << i << endl;
      TEMP = i;
      i = i +1;
      // ???
  }

  return;
}

我很困惑?? :(

【问题讨论】:

  • 你知道斐波那契数列的定义吗?
  • 你对什么感到困惑?斐波那契数列,一般编程,C++ 编程,编程...?
  • 如果您希望得到回复,您可能应该解释您对什么感到困惑、您需要什么帮助以及您想要完成什么,而不是仅仅粘贴一段代码。
  • 必须使用 BigNum 库。见wolframalpha.com/input/?i=fib%281000%29。 Fib(1000) 有 209 位。
  • @Joshua:不。你是在学校学习还是只是请别人做这项工作?不想学就退学。就那么简单。我们会做的是给你提示,或者如果你真的告诉我们你对什么感到困惑,请解释一下。

标签: c++ fibonacci


【解决方案1】:

如果您只需要提示,请使用 Google“递归”。

如果你想知道答案,谷歌“recursion fibonacci C++”,但请尝试用上面的提示来解决它:)这是值得的。

【讨论】:

  • 我会避免建议递归+斐波那契,即使有记忆。
  • 大提示:标准斐波那契递归解决方案是一个悲观的解决方案。
  • 考虑到发帖者可能的经验水平,递归可能是获得前 50 个的好方法。正如上面直接指出的,Fib(1000) 比 int 大很多。
【解决方案2】:

首先你应该检查你是否理解Fibonacci numbers的定义。

根据定义,前两个斐波那契数是 0 和 1,其余的每个数都是前两个数的和。一些来源省略了最初的 0,而是以两个 1 开始序列。

您需要两个变量来记住状态,而不仅仅是您尝试做的一个。而且你不用乘以 2,只需将两个变量相加即可。

#include <iostream>
using namespace std;
int main()
{
    int i = 0;
    int j = 1;
    while (i < 1000)
    {
        /* Print a number. */
        cout << i << endl;

        /* Set j to the sum of i and j, and i to the old value of j. */
        int TEMP = j;
        j += i;
        i = TEMP;
    }
    return 0;
}

【讨论】:

  • 不赞成给出答案。任何人将如何学习这种方式?编辑:并接受。嘿,约书亚,你真的通过这种方式学到了什么吗?你甚至了解它是如何工作的吗?
  • 我将第一次给他怀疑的好处......他似乎确实首先尝试过自己,他的其他问题看起来像是真正的问题。
  • 请注意,斐波那契数列的增长速度几乎与 2^n 一样快,因此除非您的编译器的 int 类型几乎有 1000 位,否则这将溢出。
  • 我想如果他只想要代码,他可以用谷歌搜索它。我给他的是如何将他的代码变成正确的代码。这对他来说可能比仅仅看到一个完全不同的解决方案更有用。我希望他会说“啊,这就是我所缺少的!”。无论如何,希望我没有通过回答某人的问题来冒犯这里的任何人。如果他学到了一些东西——太好了。如果他不这样做,我们不能强迫他这样做。 :-s
  • @Omnifarious:循环将在那之前很久就停止。它不是输出序列中的前 1000 个,而是输出序列中小于 1000 的整数。
【解决方案3】:

斐波那契数列 F 是 F(n) = F(n - 1) + F(n - 2), F(0) = 0, F(1) = 1

这是一些伪代码:

Start Counter1 at 0
Start Counter2 at 1.

For i = 0 to 1000
    New value = Counter1 + Counter2
    Print new value

    Counter2 = Counter1
    Counter1 = New Value
End For

这不会打印出 0 或 1;它从 F(2) 开始。您可以通过先打印 0 和 1 轻松解决此问题。此外,此代码打印前 1000 个数字。如果您将其更改为:While Counter1 &lt; 1000,您将在达到或超过 1000 时停止。

由您来实施,并确保您了解它的工作原理。

【讨论】:

  • +1 表示此问题的伪代码。
  • 你确定他想要前 1000 个数字而不是小于 1000 的所有数字吗?
  • @Mark:我刚刚编辑以包含它,但我不确定评论或编辑是否先出现。我现在才看到。
  • 看起来您的编辑排在第一位……一秒钟。 (提示:将鼠标悬停在模糊的时间戳上以弹出更准确的时间戳)。
  • @Mark:哇,我完全忘记了。谢谢你提醒我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 2020-10-18
  • 2015-06-05
  • 2015-03-08
相关资源
最近更新 更多