我最近在大学参加考试,遇到了一个问题。该任务的定义非常具体如下:
编写一个递归方法(不要更改签名或参数;不允许使用全局变量;不要使用字符串或 Stringbuffer 方法;没有循环),如果数字“n”为奇数,如果零的数量为偶数,则为“假”。
签名和参数:
public static boolean oddZeros(int n) {
}
所以对于:
n = 10 //true
n = 100 //false
n = 1402050 //true
n = 0 // true
n = 12 // false
你明白了..
我理解递归的概念,但我不知道如何在仅给出 boolean 值的情况下计算某些内容。我尝试在方法内添加一个计数器变量,但每当我进行递归调用时,显然该变量将被重置为其初始化状态。
由于这是一个非常具体的问题,到目前为止我还没有找到任何解决方案。像这样的方法会是什么样子?
最佳答案
public static boolean oddZeroes(int n) {
if (n < 10) {
return n == 0;
}
return (n % 10 == 0) ^ oddZeroes(n / 10);
}
你甚至可以把它写成一行:
public static boolean oddZeroes(int n) {
return n < 10 ? n == 0 : (n % 10 == 0) ^ oddZeroes(n / 10);
}
如果您还想处理负输入,请添加类似 if (n < 0) {return oddZeroes(-n);}
的内容一开始,即:
public static boolean oddZeroes(int n) {
if (n < 0) {
return oddZeroes(-n);
}
if (n < 10) {
return n == 0;
}
return (n % 10 == 0) ^ oddZeroes(n / 10);
}
关于java - 以 boolean 值作为返回值的递归方法来计算数字中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789640/