我正在尝试对C ++上的递归斐波那契序列计算器进行基准测试。但令人惊讶的是,程序输出0纳秒,并在打印结果后开始计算。 (打印0纳秒后CPU使用率增加)
我认为这是编译器的优化功能。
#include <iostream>
#include <chrono>
int fib2(int n) {
return (n < 2) ? n : fib2(n - 1) + fib2(n - 2);
}
int main(int argc, char* argv[])
{
auto tbegin = std::chrono::high_resolution_clock::now();
int a = fib2(50);
auto tend = std::chrono::high_resolution_clock::now();
std::cout << (tend - tbegin).count() << " nanoseconds" << std::endl;
std::cout << "fib => " << a << std::endl;
}
输出:
0 nanoseconds
有功能吗?如果是,如何禁用此功能?
答案 0 :(得分:2)
问题是,用值50
调用的此函数的结果不适合int
类型,它太大了。尝试改用int64_t
。
请注意,我用更优化的功能替换了原来的Fibbonachi函数,因为执行时间太长,并且在线工具在一段时间后会中断执行。那不是程序或代码的错误,仅仅是对在线工具的保护。