2013-05-12 126 views
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)); 
     } 
    } 
} 

有有一些错误:着某种错误的一个简单的Java递归我不明白

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

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

+3

为什么你说“有什么问题”?你认为这是什么标准或证据? – 2013-05-12 01:00:48

+0

有一个缺少'else {return 0; }'左右。 – 2013-05-12 01:04:27

+1

...并且仍然不会发布任何错误消息,并且仍然忽略对您的问题的评论和请求 - 为什么? – 2013-05-12 01:16:29

回答

2

该方法必须在所有情况下都返回一个值。您可以在外面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; 
} 
+0

如果处理'return',则不需要'else'关键字和花括号。 – Mik378 2013-05-12 01:04:21

+0

谢谢你这是一个愚蠢的错误! – 2013-05-12 01:05:57

+0

@ Mik378我不太明白你的意思。 – 2013-05-12 01:06:59

2

有一个在的if/else链的末端没有else语句添加额外的return声明。如果m是-1会发生什么?你们很多人都知道不会发生,但编译器不会。

+0

你是对的,谢谢 – 2013-05-12 01:07:32

2

您必须返回一个值,并且当您的if条件都是false时,它不会。

而且,你else语句是多余的:如果该方法的执行终止由于if,有没有“其他”。

更改您的代码是这样的:

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; 

我不知道什么是“督促”的意思,或意图是什么,所以你必须起来找出自己认为合适的默认值是。我选择0作为出发点。

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

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

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关键字在这种情况下。

+0

是的,我明白了。谢谢〜! – 2013-05-12 01:13:59

+0

@波希米亚波希米亚人的答案有类似的做法。 – Mik378 2013-05-12 01:14:44