下面的代碼將使用adjacent_difference算法產生第一10支斐波那契數:STL算法生成Fibonacci數直到某一值達到
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';
輸出:1 1 2 3 5 8 13 21 34 55
但是,如果我想繼續產生斐波那契數,直到一個與(比如說)是達到400(例如,不第四百萬分之一Fibonacci數,而是其價值正好是4的第N個斐波納契數的值是什麼百萬(或更高))。
很明顯,使用push_back做do while循環可以完成這項工作,但我想知道是否可以將STL算法與back_inserter和lambda函數結合使用來指定repeat until條件(例如,在值400萬之後停止插入達到或超過)?
我看到的問題是大多數算法都在一個範圍內運行,並且提前計算我們不知道需要多少元素才能生成400萬的斐波納契數。
但是,恩,好吧,爲什麼? – PlasmaHH
提供*生成器比試圖強制使用庫的特定子集要容易得多。 –
你需要在程序上找到它嗎?您可以使用[封閉式表達式](https://en.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding)。 –