我正在尝试计算:
x^y (mod a)
使用递归,因为它适用于较大的数字。这就是我所拥有的:
public int mod (int x, int y, int a){
if(y == 2){
return x^2%a;
}
if(y%2 == 1){
return a%m*mod(x , y/2, a);
}
if(y%2 == 0 ){
return mod(x, y/2, a);
}
}
代码不起作用,另一个问题是最后一个括号中的“缺少return语句”错误。可以做些什么来解决这个问题?
答案 0 :(得分:3)
在Java中,返回类型不是void
的函数必须返回一些值。不幸的是,编译器不够聪明,无法理解您的if
语句涵盖了所有输入参数值的范围。编译器假定您的所有条件都可以计算为false
,从而使此函数在此情况下不返回任何值。因此无法证明函数的正确性,并报告错误。
答案 1 :(得分:2)
您的上一个if
语句if(y%2 == 0)
是多余的,因为y%2
只有两种可能:它是0或1。
你检查它是否等于1,所以如果那个条件错了,你不需要检查它是否等于0,如果它不等于1,它肯定会等于0。
删除最后一个if
,它可以正常工作:
public int mod (int x, int y, int a){
if(y == 2){
return x^2%a;
}
if(y%2 == 1){
return a%m*mod(x , y/2, a);
}
return mod(x, y/2, a);
}