本文讲解如何用纯递归方式判断一个正整数的每一位数字是否严格交替为奇数和偶数(如123、1234符合,12354不符合),并提供可直接运行的java实现,包含主函数与带状态传递的递归辅助函数。
要正确判断一个正整数是否满足“各位数字奇偶性严格交替”(即相邻两位一奇一偶,无连续奇或连续偶),关键在于递归过程中必须携带前一位数字的奇偶状态——而原始函数签名 isAlternatingNumber(int num) 不允许新增参数,因此需引入一个私有辅助递归函数(helper),通过额外布尔参数 isCurrentDigitEven 传递当前待校验位的奇偶性预期。
核心思路如下:
低位向高位递归,此处“第一位”实为个位),再调用辅助函数,将剩余高位部分 num / 10 和个位奇偶性传入。 以下是完整可运行代码:
public class AlternatingChecker {
public static void main(String[] args) {
System.out.println("123: " + isAlternatingNumber(123)); // true → 3(odd),2(even),1(odd)
System.out.println("1234: " + isAlternatingNumber(1234)); // true → 4(even),3(odd),2(even),1(odd)
System.out.println("12354: " + isAlternatingNumber(12354)); // false → ...5(odd),3(odd) 连续奇
System.out.println("8: " + isAlternatingNumber(8)); // true → 单位数
System.out.println("24: " + isAlternatingNumber(24)); // false → 4(even),2(even) 连续偶
}
public static boolean isAlternatingNumber(int num) {
if (num < 10) return true;
// 以个位为起点:传入高位部分(num/10)和个位奇偶性
return findIfAlternating(num / 10, (num % 10) % 2 == 0);
}
private static boolean findIfAlternating(int num, boolean isCurrentDigitEven) {
boolean isNextDigitEven = (num % 10) % 2 == 0;
if (num < 10) {
return isCurrentDigitEven ^ isNextDigitEven;
}
return (isCurrentDigitEven ^ isNextDigitEven)
&& findIfAlternating(num / 10, isNextDigitEven);
}
}⚠️ 注意事项:
总结:当基础递归函数缺乏必要状态时,封装一个带参数的私有辅助函数是标准且优雅的解决方案。它既满足接口约束,又保证了逻辑完整性与可读性。