【发布时间】:2023-02-12 15:16:29
【问题描述】:
我在尝试 constexpr 函数时偶然发现了以下实现斐波那契数列的示例
fibon2 和 fibon1 之间没有逻辑上的区别,但我仍然遇到超出 fibon1 模板初始化的编译错误。
我在这里缺少什么?
#include <cstdint>
#include <iostream>
template <int32_t x>
constexpr int32_t fibon2() {
if constexpr (x == 0)
return 1;
else if constexpr (x == 1)
return 1;
else if constexpr (x == 2)
return 1;
else
return fibon2<x - 1>() + fibon2<x - 2>();
}
template <int32_t x>
constexpr int32_t fibon1() {
if constexpr (x == 0) return 1;
if constexpr (x == 1) return 1;
if constexpr (x == 2) return 1;
return fibon1<x - 1>() + fibon1<x - 2>();
}
int32_t fibon3(int32_t x) {
if (x == 1) return 1;
if (x == 2) return 1;
return fibon3(x - 1) + fibon3(x - 2);
}
int main() {
std::cout << fibon3(2) << std::endl;
std::cout << fibon2<2>() << std::endl;
std::cout << fibon1<2>() << std::endl;
return 0;
}
【问题讨论】:
-
“没有逻辑上的区别……”就在这里。
标签: c++ c++17 constexpr if-constexpr