Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,是否可以通过预处理器指令计算斐波那契序列?_C_Macros_Fibonacci - Fatal编程技术网

在C语言中,是否可以通过预处理器指令计算斐波那契序列?

在C语言中,是否可以通过预处理器指令计算斐波那契序列?,c,macros,fibonacci,C,Macros,Fibonacci,仅供个人学习和更好地理解C代码预处理器我认为C中的宏不能支持递归宏。但斐波那契是可能的。 利用第n个数的公式 定义Fibonacci(n)(POW(1 + PoW(51,1,2),n)-PW(1,PW(5,1/2),N))/ POW(5/1,2)< /C> >/P> < P>递归C宏是不允许的,在C或C++中。 宏-只是一个文本替换,而不是使用boost预处理器的插槽进行计算,以及一个迭代解决方案,使用宏I作为输入: #ifndef INITIALIZE #define INITIALIZE

仅供个人学习和更好地理解C代码预处理器我认为C中的宏不能支持递归宏。但斐波那契是可能的。 利用第n个数的公式


<代码>定义Fibonacci(n)(POW(1 + PoW(51,1,2),n)-PW(1,PW(5,1/2),N))/ POW(5/1,2)< /C> >/P> < P>递归C宏是不允许的,在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
\ifndef初始化
#定义初始化
#包括

#如果你想用宏做什么?一个64位整数最多可以存储第94项。一般建议。当你可以使用函数时,不要使用宏。@klutt:OP没有说他们想用宏实现斐波那契函数。他们问是否可能,这表明他们只想知道,而不是想做。通常,了解各种工具的功能对于理解它们、学习更多知识、激发创造力以及了解未来情况下可用的工具非常有用。他们会问是否可以使用预处理器指令,而不仅仅是宏。@EricPostphil我完全同意。然而,在OP编辑它之前,问题看起来完全不同。似乎不可能使用代码预处理器执行递归计算?在某种程度上,C中的递归宏是可能的。参见(a)宏替换不可能实现无限递归,但实际递归是有限的。(b) 宏替换预处理器标记,而不是文本。它们还可以串接和连接。(c) 问题是关于使用预处理器指令来计算斐波那契函数,而不仅仅是使用宏替换。因此,一个答案必须考虑使用其他指令的可能性,例如<> > >代码>,它可以是递归的。(我看到OP编辑了他们的问题;它最初只询问宏。所以(c)在写这个答案时不是问题)。最后可以用C语言中的预处理器指令实现斐波那契函数。(预处理后的递归包含和相当大的文件)。好吧,你需要定义
POW
,小心
1/2
不会被计算为
0
@Ian Abbott我同意,但这只是一个想法。我认为这是一个直接且非常好的方法。但实际上,我正在学习C预处理器,并想知道是否存在一个递归解决方案来获得一些斐波那契序列跑步前。谢谢你的回答~@Silver