这是预期的输出:
替代文字https://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,那些嘲笑的东西会得到什么。 如果你不知道递归,你必须明确地学习它。 或者坚持精细数学(如其他答案所示),但递归是程序员应该知道的强大工具,并且递归方法比使用数学“技巧”更直观。
使用https://www.research.att.com/~njas/sequences/b000045.txt作为数据文件;)
你可以在这里复制
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;
* 猛禽 *
以上就是c/c++开发分享C中的斐波纳契数列相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549443.html