2014-12-05 93 views
1

我正在開發一個程序,遞歸地生成一個音階的音調頻率。每個頻率是比前一個更高的兩個十二個根。該計劃必須使用遞歸(呃,教育)。當我使用這種方法時,我只是得到了一遍又一遍重複的初始音調。這是爲什麼?Inifinte遞歸循環我無法解決?

public static void scale(double x, double z){ 
double y; 
    if(z == x){ 
    y = z * Math.pow(2, (1/12)); 
    System.out.println(y); 
    scale (y, y); 
    } 
    else if(z >= (2 * x) - 1 || z <= (2 * x) + 1){ 
    y = z; 
    System.out.println(); 
    } 
    else{ 
    y = z * Math.pow(2, (1/12)); 
    scale (y, y); 
    } 
    System.out.println(y); 
} 

回答

6

這是爲什麼?

由於Java的整數除法。特別是,1/12變成0,而不是0.083333333,因爲必須產生int。然後2上升到電量01y是相同的z。使用double文字強制浮點除法。

1.0/12.0 
+0

我總是忘記整數除法.....非常感謝。在你還在學習的時候總是會幫助你有第二雙眼睛。 – 2014-12-05 20:42:45

+4

完成:Java不是唯一的語言;爲了安全起見,如果您使用浮點數作爲一般經驗法則,請使用浮點文字。 – Qix 2014-12-05 20:42:46