我在递归方面遇到了一些麻烦。目前,此代码给出了一条错误消息"缺少return语句"。任何方式让我按照我想要的方式工作?我希望它计算x n ,然后返回" count"当n达到零时。
public class Question6p2 {
public static void main(String[] args){
int n = -6;
int x = 2;
int count = x;
power2(n, x, count);
System.out.println(power2(n, x, count));
}
public static int power2(int n, int x, int count){
if (n != 0){
if (n>0){
count = count * x;
n = n - 1;
}
else if (n<0) {
count = count * -x;
n = n + 1;
}
power2(n, x, count);
}
else if (n == 0){
return count;
}
}
}
也许我发现这一切都错了。有人在乎帮忙吗?
答案 0 :(得分:3)
目前,您有此声明:
power2(n, x, count);
...完全忽略了结果。在该分支中,我们永远不会从方法调用返回任何内容。我怀疑这两个问题是有关联的。
我怀疑你只想要:
return power2(n, x, count);
答案 1 :(得分:2)
目前您收到的错误是没有return语句,因为您的return语句在if语句中,所以如果if语句没有运行,您将不会返回任何有问题的内容。
另外我认为你的递归从根本上说是错误的,因为你永远不会递归地回调你的方法。
你可能想要在power方法中做的是接受n作为调用方法的时间,然后在每次递归时将其降低1。然后在每次递归时将x乘以原始值。
这就是我的意思:
public static double power2(int n, int x,int xOriginal){
if(n == 0){
return 1;
}
if(n < 0){
return 1 / power2(n*-1, x, x);
}
if(n <= 1){
return x;
}
return power2(n -1, x * xOriginal, xOriginal);
}
编辑:现在使用否定n。
答案 2 :(得分:1)
您的算法存在一些问题:
拥有负指数是什么意思?
你应该明白x -n 可以写成1 / x n 。这不是您的算法中反映的内容。
所有可能的情况
计算指数时有4种基本情况。
当x的指数为零时,您的算法应返回1。当指数为1时返回x,或者当n>时递归调用算法。 1。
在特殊情况下,n < 0(即你有一个负指数)只要在调用方法之前更改n的符号,就可以简单地返回倒数1 /方法()。
该行:
else if (n < 0){
n = -n;
return(1 / power2(n, x, count));
}
检查否定指数,并返回1 / x n 请注意n
的符号在此处已更改,现在此操作与使用正指数的任何其他方法调用一样。< / p>
public class TestCode {
public static void main(String[] args){
int n = 4;
int x = 5;
double count = x;
System.out.println(power2(n, x, count));
}
public static double power2(int n, int x, double count){
if (n == 0)
return 1;
else{
if (n > 1){
count = count * x;
n = n - 1;
}
else if (n < 0){
n = -n;
return(1 / power2(n, x, count));
}
else if (n == 1) {
return count;
}
return power2(n, x, count);
}
}
}