Java 基本递归偶数/奇数-它具体做什么?

Java 基本递归偶数/奇数-它具体做什么?,java,recursion,Java,Recursion,我知道这个方法检查整数是否为偶数,但具体如何?我在斐波那契或阶乘等例子中了解了递归是如何工作的,但在这方面我没有。我想我不明白是因为语法 // Assume n >= 0 public static boolean even(int n) { return (n<=1) ? (n==0) : !even(n-1); } 这是JAVA的缩写,如果不是: 它等于以下语法: if(condition){ trueCase; } else{ elseCase; }

我知道这个方法检查整数是否为偶数,但具体如何?我在斐波那契或阶乘等例子中了解了递归是如何工作的,但在这方面我没有。我想我不明白是因为语法

// Assume n >= 0 
public static boolean even(int n) { 
   return (n<=1) ? (n==0) : !even(n-1); 
} 
这是JAVA的缩写,如果不是:

它等于以下语法:

if(condition){
   trueCase;
}
else{
  elseCase;
}
在代码中:

return (n<=1) ? (n==0) : !even(n-1); 
返回(n语句

if((n%2) == 0)
    return true;
else
    return false;
相当于

return (n%2) == 0;
任何计算为布尔值的表达式都可以使用,而不是直接使用两个布尔值之一

至于名为“偶数”的函数,它基本上说一个整数是偶数,如果前一个整数不是偶数,除非它小于一,在这种情况下,如果它是零,则是偶数。因为它的计算结果是布尔值,所以可以将其作为返回值返回


您应该注意,您的函数不适用于负值。

(n==0)
!偶数(n-1)
都是具有布尔结果的表达式。您不会明确看到“true”或“false”值。如果你仔细想想,你就会明白为什么它适用于非负值。它不是一个编写得很好的函数。对于小于或等于-1的
n
的任何值,它都返回false。而对于非负值,它的效率非常低。我想它是用来理解递归的练习,而不是一个很好的测试举例说明如何判断一个整数是偶数还是奇数。这是递归最糟糕的用法之一。如果你的老师在下一节课中没有指出这一点,就要求退还你的钱:-)递归就像一把电锯。它是一个非常强大的工具,对于特定类型的问题来说是不可或缺的,但在不属于它的地方应用它是不可原谅的。我最讨厌的一件事是教授们用这种方式教授。非常感谢你们——这很有启发性。现在我明白了怎么想了。
if(n<=1)){
   if(n==0){
     return true;
   }
   else{
     return false;
   }
}
else{
  if(even(n-1)){
    return false;
  }
  else{
   return true;
  }
}
if((n%2) == 0)
    return true;
else
    return false;
return (n%2) == 0;