0
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){

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

4

5 回答 5

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;
}
于 2013-05-12T01:01:55.353 回答
2

if/else 链的末尾没有 else 语句。如果 m 为 -1 会发生什么?你们很多人都知道这永远不会发生,但编译器不会。

于 2013-05-12T01:02:08.173 回答
2

你必须返回一个值,当你的if条件是 all时false,它不会。

此外,您的else陈述是多余的:如果方法的执行由于 a 而终止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作为起点。

于 2013-05-12T01:05:43.580 回答
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));
    }
}

如果使用“奇怪”,您的意思是终止递归:我没有看到。

于 2013-05-12T01:07:47.807 回答
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关键字。

于 2013-05-12T01:11:04.527 回答