c++ - STL算法生成斐波那契数直到达到某个值

标签 c++ stl

以下代码将使用 adjacent_difference 算法生成前 10 个斐波那契数:

v = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
std::adjacent_difference(v.begin(), v.end() - 1, v.begin() + 1, std::plus<int>());

for (auto n : v) {
    std::cout << n << ' ';
}
std::cout << '\n';

Output: 1 1 2 3 5 8 13 21 34 55

但是,如果我想继续生成斐波那契数,直到达到(比如说)4,000,000 的斐波那契数(例如,不是第四百万个斐波那契数,而是第 N 个斐波那契数,其值恰好是 400 万(或更大) )).

显然,带有 push_back 的 do while 循环可以完成这项工作,但我想知道是否可以将 STL 算法与 back_inserter 和 lambda 函数结合起来以指定重复直到条件(例如,在值 400 万之后停止插入达到或超过)?

我看到的问题是,大多数算法都在一个范围内运行,并且我们提前不知道需要多少元素才能产生 400 万的斐波那契数。

最佳答案

标准算法用于提取编程实践中常见的实现。这使您和读者都更容易理解代码。使用内置算法将斐波那契数累加到给定值对于您和阅读您的代码的任何人来说都是一种矫枉过正。

为您的用例编写一个“愚蠢”的解决方案真的很容易,而且更容易维护。例如:

void fibUpTo(int limit) {
  int a, b, c;
  a = b = 1;
  while (a < limit) {
    cout << a << endl;
    c = a + b; 
    a = b;
    b = c;
  }
}

关于c++ - STL算法生成斐波那契数直到达到某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381360/

相关文章:

c++ - std::min/max 类型推导在 linux 和 windows 上不同

c++ - 可以将标准 GDB 调试器与 Qt 可执行文件一起使用吗?

C++ 初始化为函数

c++ - 检查迭代器是否有效

c++ - vector 中的 size() 与 empty() - 为什么首选 empty()?

c++ - 如何更改 C++ 标准库中堆中的最大元素?

c++ - 编译gsoap-onvif解决#error : ‘M_ASN1_STRING_data’ was not declared in this scope

c++ - 在 X、Y 和 Z(平移)值中补偿俯仰、滚动和偏航

c++ - 模板函数返回 void

c++ - 调用 std::vector::clear() 会将 std::vector::capacity() 设置为零吗?