仅用于个人学习和更好地理解C代码预处理器:
我想知道是否可以通过C语言中的预处理器指令来实现Fibonacci函数。
Fibonacci函数的正常定义可以是:
int f(int i) { // i should be non-negative integer
if (i <= 1) {
return 1;
}
return f(i - 1) + f(i - 2);
}
在C++中使用模板元编程技术的方法不是我所需要的。
似乎不可能通过使用代码预处理器来执行递归计算?
我不认为C中的宏可以支持递归宏。但斐波那契可能是宏观的。利用第n个的公式
#define Fibonacci(n) (POW(1+POW(5,1/2),n) - POW(1-POW(5,1/2),n))/POW(5,1/2)
在C或C++中不允许使用递归宏。
宏——只是文本替换,而不是计算
使用boost预处理器的插槽和迭代解决方案,以宏I
作为输入:
#ifndef INITIALIZE
#define INITIALIZE
# include <boost/preprocessor/slot.hpp>
# if I<=2
1
# else
# define BOOST_PP_VALUE 2
# include BOOST_PP_ASSIGN_SLOT(1)
# define BOOST_PP_VALUE 1
# include BOOST_PP_ASSIGN_SLOT(3)
# define BOOST_PP_VALUE 1
# include BOOST_PP_ASSIGN_SLOT(4)
# include __FILE__
# endif
#else
# define BOOST_PP_VALUE BOOST_PP_SLOT(1) + 1
# include BOOST_PP_ASSIGN_SLOT(1)
# define BOOST_PP_VALUE BOOST_PP_SLOT(3)
# include BOOST_PP_ASSIGN_SLOT(2)
# define BOOST_PP_VALUE BOOST_PP_SLOT(4)
# include BOOST_PP_ASSIGN_SLOT(3)
# define BOOST_PP_VALUE BOOST_PP_SLOT(2) + BOOST_PP_SLOT(3)
# include BOOST_PP_ASSIGN_SLOT(4)
# if I==BOOST_PP_SLOT(1)
BOOST_PP_SLOT(4)
# else
# include __FILE__
# endif
#endif
演示:http://coliru.stacked-crooked.com/a/c399d11dedc306ca