是否可以通过C中的预处理器指令计算斐波那契数列?

问题描述 投票:0回答:4

仅供个人学习和更好地理解C代码预处理器😳:

我想知道是否可以通过C语言中的预处理器指令实现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 macros fibonacci
4个回答
3
投票

我不认为C中的宏可以支持递归宏。但斐波那契是可能的宏观。 通过使用第n个数的公式

#define Fibonacci(n) (POW(1+POW(5,1/2),n) - POW(1-POW(5,1/2),n))/POW(5,1/2)


3
投票

C 或 C++ 中不允许使用递归宏。

宏 — 只是文本替换,而不是计算


2
投票

使用 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


0
投票

是的,这是可能的。请参阅此示例

© www.soinside.com 2019 - 2024. All rights reserved.