C中的斐波纳契数列

这是预期的输出:

替代文字http://sofzh.miximages.com/c/f1lfuh.jpg

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

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

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

使用递归:

替代文字


C / C ++语言版本:

int fib(int a) { if (a == 0) return 0; if (a == 1) return 1; return fib(a - 1) + fib(a - 2); } 

应用此答案评论的建议:

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); } 

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); } 

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

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

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

 a = 0; // 0 b = 1; // 1 a = a + b; // 1 b = a + b; // 2 a = a + b; // 3 b = a + b; // 5 

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

……( 编辑 )……

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

使用http://www.research.att.com/~njas/sequences/b000045.txt作为数据文件;)

http://mathworld.wolfram.com/BinetsFibonacciNumberFormula.html

你可以在这里复制

http://cboard.cprogramming.com/cplusplus-programming/108426-binets-formula.html

 long double f(short N) { double phi = (1+pow(5,0.5))/2; return ceil((pow(phi,N) - pow(1-phi,N))/pow(5,0.5)); } 

当然,它只是数学,但它确实计算了fib(N)没有递归和循环..你仍然需要一种方法来打印fib(1).. fib(n)的所有值虽然

老师想要的可能是递归。

由于不允许循环和递归,

 int fib(int n) { int fk1 = 0, fk0 = 1; main_sub3: fk1 += fk0; fk0 = fk1 - fk0; if (n > 0) { -- n; goto main_sub3; 

* 猛禽 *