原始 - 递归偶数/奇数 - 它究竟做了什么?

时间:2018-01-28 02:00:57

标签: java recursion

我知道这个方法检查整数是否是偶数,但究竟是怎么回事?我在像 fibonacci factorial 这样的例子中理解递归是如何工作的,但在此基础上却没有。我认为由于语法原因,我无法得到它。

// Assume n >= 0 
public static boolean even(int n) { 
   return (n<=1) ? (n==0) : !even(n-1); 
} 

我的问题是:它是一个布尔方法,为什么没有&#34; true&#34;或&#34;假&#34;? 它究竟是如何检查它是否均匀?如果我在没有递归的if语句中这样做,我会检查它:

if((n%2) == 0)
return true;

2 个答案:

答案 0 :(得分:1)

JAVA short if else else

condition ? trueCase: elseCase;

它等于以下语法:

if(condition){
   trueCase;
}
else{
  elseCase;
}

在您的代码中:

return (n<=1) ? (n==0) : !even(n-1); 

等于:

if(n<=1)){
   if(n==0){
     return true;
   }
   else{
     return false;
   }
}
else{
  if(even(n-1)){
    return false;
  }
  else{
   return true;
  }
}

答案 1 :(得分:0)

陈述

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

相当于

return (n%2) == 0;

可以使用任何求值为布尔值的表达式,而不是直接使用两个布尔值中的一个。

对于名为“even”的函数,它基本上表示一个整数即使前一个整数不是偶数,除非它小于1,在这种情况下它甚至是零。由于它的计算结果为布尔值,因此您可以将其作为返回值返回。

您应该注意,您的功能不适用于负值。