斐波那契系列的问题和c

时间:2013-11-08 02:05:57

标签: c math

#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编程,并决定尝试计算Fibonacci系列中的任何数字。我的基础是我的lua脚本here。我不知道自己做错了什么,有人可以给我一些见解吗?

1 个答案:

答案 0 :(得分:2)

你的公式错了。你想要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)条款周围缺少括号,并且使用的是地板而不是圆形,这低估了我的测试中的斐波那契数字。 (这主要与pow函数的低精度有关。第七个斐波纳契数,13,出现在12.969)

你也可能想要改变

scanf("%s");

char tmp;
scanf("%c", &tmp);

由于你的方式错误地省略了一个参数。

希望这有帮助!