这是预期的输出:
alt text http://i48.tinypic.com/f1lfuh.jpg
我们要制作一个计算Fibonacci序列的C程序。 我们最多只允许3个变量,我们不允许使用循环。 我不知道该做什么以及如何开始。
我希望你们能帮助我。 :/
答案 0 :(得分:21)
假设您使用32位无符号整数,第48个Fibonacci数将导致整数溢出。这使得使用具有预先计算的所有值的查找表(手动)是完全可行的。
答案 1 :(得分:17)
使用递归:
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);
}
答案 2 :(得分:7)
我怀疑如果你不能使用你的教授/老师打算你使用递归的循环。否则,只需要查找正确的公式,这在编程类中是没有意义的。
如果允许递归,我高度推荐阅读this教程(假设您不熟悉它)。
答案 3 :(得分:7)
如果不允许循环和递归,请选择斐波纳契序列定义并手工完成......这是非常无聊和无趣的,但它是这些限制中最直接的解决方案。
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,那些嘲笑的东西会得到什么。如果你不知道递归,你必须明确地学习它。或者坚持精细数学(如其他答案所示),但递归是程序员应该知道的强大工具,并且递归方法比使用数学“技巧”更直观。
答案 4 :(得分:7)
答案 5 :(得分:4)
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)虽然
你老师想要的可能是递归。
答案 6 :(得分:4)
由于不允许循环和递归,
int fib(int n) {
int fk1 = 0, fk0 = 1;
main_sub3:
fk1 += fk0;
fk0 = fk1 - fk0;
if (n > 0) {
-- n;
goto main_sub3;
* raptor *