private static BigInteger[] matrixPow(BigInteger[] matrix, int n){
if(n==0){
BigInteger[] result = {BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE};
}
else{
BigInteger[] partial = matrixPow(matrix, n/2);
BigInteger[] result = matrixMultiply(partial, partial);
if(n%2 == 1){
result = matrixMultiply(result,matrix);
}
return result;
}
}
是我到目前为止的代码,但编译器说它并不总是返回,但它在else语句中我将不得不改变
答案 0 :(得分:4)
您应该将return result
向上移动一个范围。
private static BigInteger[] matrixPow(BigInteger[] matrix, int n){
BigInteger[] result;
if(n==0) {
result = {BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE};
} else {
BigInteger[] partial = matrixPow(matrix, n/2);
result = matrixMultiply(partial, partial);
if(n%2 == 1) {
result = matrixMultiply(result,matrix);
}
}
return result;
}
这里的根本问题是你的格式化,即缩进是关闭的,这使得很难看到范围的开始和结束。
答案 1 :(得分:1)
返回封装在else
块中。
if
块的if else
部分没有返回,所以当它到达if
块时,它不会返回任何内容,因此会出错。