2015-12-19 53 views
3

我已经在C中编写了这段代码来计算斐波那契数列的黄金比例,但程序在屏幕上什么也没有输出。我无法理解我的逻辑出了什么问题。黄金比例在C?

你能解释一下吗?

任何形式的帮助将不胜感激。

int fibonacci (int n){ 
    if (n==0 || n==1) 
     return n; 
    else 
     return fibonacci(n-1)+fibonacci(n-2); 
} 

double fibonacci_golden_ratio(int n){ 
    double phi; 
    phi = fibonacci(n)/fibonacci(n-1); 
    return phi; 
} 

int main(){ 
    int i; 
    for (i=1;;i++){ 
     printf ("F = %d ",fibonacci(i)); 
     printf ("phi = %.5lf \n", fibonacci_golden_ratio(i)); 
     if (fabs (fibonacci_golden_ratio(i) - fibonacci_golden_ratio(i-1)) < 0.0001) 
      break; 
    } 
    printf ("phi = %.5lf\n", fibonacci_golden_ratio(i)); 
    return 0; 
} 
+0

你什么意思与输出什么都没有? –

+0

它只编译和写入F = 1 –

+0

尝试添加一个全局'count'变量,在每次调用'fibonacci'时增加它,并打印它的最终值。我运行它时会收到11438个电话。如果你记得较低的值,斐波那契数可以非常有效地计算;您重复计算它们,然后在'fibonacci_golden_ratio'中调用'fibonnaci()'两次,然后在循环的每次迭代中调用'fibonacci_golden_ratio'四次。它可以工作,但它可能会更有效率。 –

回答

7

您正在执行整数除法这里:

phi = fibonacci(n)/fibonacci(n-1); 

(如fibonnacci返回int),有一个浮点除法改变声明:

phi = fibonacci(n)/(double) fibonacci(n-1); 

而且,你必须以i = 2开始循环,即,

而不是

for (i=1;;i++){ 

fibonacci_golden_ratio(i-1)将计算phi = fibonacci(0)/(double) fibonacci(-1);

+0

谢谢!有效! :) –

0

如果调用fibonacci_golden_ratio(0),它会调用斐波纳契(-1),将永远循环下去。