2014-12-05 114 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