一个简单的Java递归,有一些我没有得到的bug

时间:2013-05-12 00:59:28

标签: java recursion

public class test {

    public static void main (String[] args) {
        System.out.print (prod (1, 2));
    }
    public static int prod (int m, int n){
        if (m == 0) {
            return n+1;
        } else if(m>0 && n == 0){
            return prod (m-1, 1);
        } else if(m>0 && n >0){
            return prod(m-1,prod(m,n-1));
        }
    }
}

出现了问题:

public static int prod (int m, int n){

但我无法弄清楚它是什么。

5 个答案:

答案 0 :(得分:2)

该方法必须在所有情况下都返回一个值。您可以在return语句块

之外添加其他if语句
public static int prod (int m, int n) {
   if (m == 0) {
     return n+1;
   } else if(m>0 && n == 0) {
     return prod (m-1, 1);
   } else if(m>0 && n >0) {
     return prod(m-1,prod(m,n-1));
   }

   return n;
}

答案 1 :(得分:2)

if / else链的末尾没有else语句。如果m是-1会发生什么?你们很多人都知道从未发生过,但编译器却没有。

答案 2 :(得分:2)

您必须返回一个值,当if条件全部为false时,它不会。

此外,您的else语句是多余的:如果方法的执行因if而终止,则不是“else”。

将您的代码更改为以下内容:

if (m == 0)
    return n + 1;
if (m > 0 && n == 0)
    return prod(m - 1, 1);
if (m > 0 && n > 0) {
    return prod(m - 1, prod(m, n - 1));
// return a default value if no conditions met
return 0;

我不知道“prod”意味着什么,或意图是什么,所以你要自己弄清楚适当的默认值是什么。我选择0作为起点。

答案 3 :(得分:0)

假设有自然数字。

public static int prod(int m, int n){
    if (m <= 0) {
        return n+1;
    } else if (n <= 0){
        return prod(m-1, 1);
    } else {
        return prod(m-1, prod(m, n-1));
    }
}

如果“怪异”,则意味着终止递归:我没有看到。

答案 4 :(得分:0)

缩短@ Reimeus的解决方案:(解释我上面的评论)

if (m == 0) 
    return n + 1;
if (m > 0 && n == 0) 
    return prod(m - 1, 1);
if (m > 0 && n > 0) 
    return prod(m - 1, prod(m, n - 1));
return n;

在这种情况下,不需要花括号和冗余无用的else关键字。