#include <stdio.h>
#include <math.h>
int fib();
int scan;
int main() {
scanf("%d", &scan);
printf("%d\n", fib());
scanf("%s");
return 0;
}
int fib() {
return floor((pow(1+sqrt(5)/2, scan)-(-pow(1-sqrt(5)/2, scan)))/sqrt(5));
}
我对使用 C 进行编程还很陌生,因此决定尝试计算斐波那契数列中的任何数字。我基于我的 lua 脚本 here .我不知道自己做错了什么,有人可以给我一些见解吗?
你的公式错了。你希望 fib 是:
int fib() {
return round((pow((1+sqrt(5))/2, scan)-(-pow((1-sqrt(5))/2, scan)))/sqrt(5));
}
相反。您在 1+sqrt(5)
和 1-sqrt(5)
术语周围缺少括号,并且使用 floor 而不是 round,这低估了我的斐波那契数测试。 (这主要与 pow
函数的精度低有关。第七个斐波那契数 13 结果为 12.969)
你可能还想改变
scanf("%s");
到
char tmp;
scanf("%c", &tmp);
由于您的方式错误地省略了参数。
希望这对您有所帮助!
我是一名优秀的程序员,十分优秀!