Java:“缺少退货声明”

时间:2014-03-29 19:43:38

标签: java recursion

我在递归方面遇到了一些麻烦。目前,此代码给出了一条错误消息"缺少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;
        }
    }
}

也许我发现这一切都错了。有人在乎帮忙吗?

3 个答案:

答案 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 0 = 1。
  • 任何x 1 = x
  • 任何负指数x -n = 1 / x n
  • 任何大于1的正指数:x n 其中n> 1

当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);
        }
    }
}