文章插图
你公式计算的公式不对 如果按照这个公式计算 , 只有0 和1的时候是一样的 剩下的都不一样程序这样做#include #include
int f1(int i){ if(i == 0) return 0; if(i == 1) return 1; return f1(i - 1) + f1(i - 2);}int f2(int i){ #if 1 int ret; double c; c = (1.0+sqrt(5)/2.0); ret =(int)(pow(c,i)/sqrt(5)+0.5);#else int ret; double c, c1; c = (1.0+sqrt(5))/2.0; c1 = (1.0-sqrt(5))/2.0; ret =(int)((pow(c,i) - pow(c1, i))/sqrt(5)+0.5);#endif return ret;}main(){ int i = 0; int r1, r2; while(1) {r1 = f1(i);r2 = f2(i);if(r1 != r2)printf("diff at %d, %d %d\n", i, r1, r2);i ++; }}在f2里面有一个#if 1 这时是用你的公式改成#if 0后用的是正确的公式
【斐波那契数列:c语言】
推荐阅读