一个简单的Java递归,有一些我不知道的bug';得不到

一个简单的Java递归,有一些我不知道的bug';得不到,java,recursion,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 ==

有点不对劲:

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

但是我不知道它是什么。

该方法在所有情况下都必须返回一个值。您可以在
if
语句块之外添加一个额外的
return
语句

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

在所有情况下,该方法都必须返回一个值。您可以在
if
语句块之外添加一个额外的
return
语句

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

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

if/else链的末尾没有else语句。如果m是-1会发生什么?很多人都知道这种情况永远不会发生,但编译器不会。必须返回一个值,如果
条件都为
false,则不会返回

另外,您的
else
语句是多余的:如果方法的执行由于
if
而终止,则不存在“else”

将代码更改为以下内容:

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

我不知道“prod”是什么意思,也不知道它的用意是什么,所以您必须自己找出合适的默认值。我选择了
0
作为起点。

您必须返回一个值,如果
条件都为
false
,则不会返回值

另外,您的
else
语句是多余的:如果方法的执行由于
if
而终止,则不存在“else”

将代码更改为以下内容:

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

我不知道“prod”是什么意思,也不知道它的用意是什么,所以您必须自己找出合适的默认值。我选择了
0
作为起点。

假设自然数是预期的

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;
publicstaticintprod(intm,intn){

如果(m假设自然数是预期的

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;
publicstaticintprod(intm,intn){

如果(m只是为了缩短@Reimeus的解决方案:(解释我上面的评论)


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

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


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

为什么说“有问题”?根据什么标准或证据,你认为这是错误的?缺少
else{return 0;}
差不多……你仍然没有发布任何错误消息,仍然忽略对问题的评论和请求——为什么?@HovercraftFullOfEels好的,我只是不知道这里的规则,谢谢你的通知。你为什么说“出了问题”?根据什么标准或证据,您认为是这样的?缺少
else{return 0;}
大概吧……你仍然没有发布任何错误消息,仍然忽略对你的问题的评论和请求——为什么?@HovercraftFullOfEels好的,我只是不知道这里的规则,谢谢你的通知。如果你处理
return
@green\u claws,就不需要
关键字和花括号了。他的意思是你可以傻笑将return语句作为方法中的最后一条语句放在
if
语句之外。@green\u claus我在下面的回答中解释了我的评论。不需要
else
关键字和花括号如果处理
return
@green\u claus,他的意思是你可以简单地将return语句作为me中的最后一条语句如果
if
语句之外的方法。@green\u claus我在下面的回答中解释我的评论。是的,我明白了。谢谢~!@Bohemian Bohemian的回答有类似的方式。是的,我明白了。谢谢~!@Bohemian Bohemian的回答有类似的方式。