2015-12-19 95 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),將永遠循環下去。