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){
但我无法弄清楚它是什么。
答案 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
关键字。