C中的斐波纳契数列

rob*_*2k8 -2 c math

这是预期的输出:

替代文字http://i48.tinypic.com/f1lfuh.jpg

我们要制作一个计算Fibonacci序列的C程序.我们最多只允许3个变量,我们不允许使用循环.而且我不知道该怎么做以及如何开始.

我希望你们能帮助我.:/

Jer*_*myP 22

假设您使用32位无符号整数,第48个Fibonacci数将导致整数溢出.这使得使用具有预先计算的所有值(手动)的查找表是完全可行的.

  • +1为另一个解决方案(仅在评论中说).为了展示一个可能的代码,有趣的是要强调递归解决方案,即使递归可能听起来与他不同,也是最短且更直观的....(而不是手工计算,他可以使用[this](http://81.167.229.63/~srbzorg/fibonaccigenerator.php)链接来自维基百科) (2认同)

Svi*_*ack 17

使用递归:

替代文字


C/C++语言版本:

int fib(int a)
{
    if (a == 0) return 0;
    if (a == 1) return 1;
    return fib(a - 1) + fib(a - 2);
}
Run Code Online (Sandbox Code Playgroud)

应用此答案评论的建议:

C语言版本:

/*
 * -1 is a error handler
 */
int fib(int a)
{
    if (a < 0 || a > 47) return -1;
    if (a == 0) return 0;
    if (a == 1) return 1;
    return fib(a - 1) + fib(a - 2);
}
Run Code Online (Sandbox Code Playgroud)

C++语言版本:

int fib(int a)
{
    if (a < 0) throw new std::out_of_range("Fibonacci is not defined for negative sign values.");
    if (a > 47) throw new std::overflow_error("Fibonacci for this value was overflow the integer.");
    if (a == 0) return 0;
    if (a == 1) return 1;
    return fib(a - 1) + fib(a - 2);
}
Run Code Online (Sandbox Code Playgroud)


Che*_*Pls 7

我怀疑如果你不能使用你的教授/老师打算你使用递归的循环.否则,只需要查找正确的公式,这在编程类中是没有意义的.

如果允许递归,我强烈建议您阅读教程(假设您不熟悉它).


Shi*_*zou 7

如果不允许循环和递归,请选择斐波那契序列定义并手工完成......这是无聊的无聊和无趣,但它是这些限制中最直接的解决方案.

a = 0; // 0
b = 1; // 1
a = a + b; // 1
b = a + b; // 2
a = a + b; // 3
b = a + b; // 5
Run Code Online (Sandbox Code Playgroud)

等等:b保存第n个和第(n-1)个数字.(复制粘贴a = a+b; b = a+b;你需要多少次......)允许复制粘贴代码片段?

......(编辑)......

当然,这个答案只是展示了如果我们放了太多的rescrictions可以得到多少可笑的东西.如果你不知道递归,你必须明确地学习它.或坚持精细数学(如其他答案所示),但递归是程序员应该知道的强大工具,并且递归方法比使用数学"技巧"更直观.

  • LAME ......而且我们可能不想给rob2k8甚至一个想法,如果事情甚至是REMOTELY可接受的那种想法. (6认同)