模运算的递归

时间:2016-10-03 07:52:30

标签: java recursion

我正在尝试计算:

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语句”错误。可以做些什么来解决这个问题?

2 个答案:

答案 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);


}