Inifinte递归循环我无法解决?

Ely*_*man 1 java recursion

我正在开发一个程序,以递归方式生成音阶中的音调频率.每个频率是比前一个频率高两个的第十二个根.该程序必须使用递归(呃,教育).当我使用这种方法时,我只是一遍又一遍地重复初始音调.这是为什么?

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);
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 6

这是为什么?

因为Java的整数除法.具体来说,1/12变得0不是0.083333333,因为int必须产生.然后2提升到权力01y是一样的z.

使用double文字强制浮点除法.

1.0/12.0
Run Code Online (Sandbox Code Playgroud)

  • 要完整:Java并不是唯一能够做到这一点的语言; 为了安全起见,如果您使用浮点作为一般经验法则,请使用浮点文字. (4认同)