求助:编写递归函数判断数字奇偶交替及代码纠错
问题分析与修正
你的递归函数逻辑完全偏离需求,核心错误是没有比较相邻两位数字的奇偶性,仅通过判断最后一位是否为偶数+递归结果为true来返回值,这显然无法实现“奇偶交替”的判断。比如输入123时,原函数会错误返回false,但正确结果应为true。
错误示例验证
以输入123为例,原函数执行流程:
- 123>10,调用
isAlternatingNumber(12) - 12>10,调用
isAlternatingNumber(1),返回true - 回到12的处理:12%10=2,2是偶数且flag=true,返回true
- 回到123的处理:123%10=3,3是奇数,不满足
num%10%2==0,返回false(与预期结果矛盾)
修正后的递归实现
正确思路是:每次递归时,先判断当前数字的最后两位奇偶性是否不同,再递归验证去掉最后一位后的数字是否满足条件。代码如下:
//Assumption : num > 0 //判断数字各位是否奇偶交替的递归函数 public static boolean isAlternatingNumber(int num) { // 单个数字直接返回true if(num < 10) { return true; } // 获取最后两位数字 int lastDigit = num % 10; int secondLastDigit = (num / 10) % 10; // 最后两位奇偶不同,且前面的数字也满足交替条件 return (lastDigit % 2 != secondLastDigit % 2) && isAlternatingNumber(num / 10); }
验证示例
- 输入
123:最后两位3(奇)和2(偶)不同,递归验证12;12的最后两位2(偶)和1(奇)不同,递归验证1返回true,最终返回true - 输入
12354:最后两位4(偶)和5(奇)不同,递归验证1235;1235的最后两位5(奇)和3(奇)相同,返回false,最终返回false - 输入
1234:最后两位4(偶)和3(奇)不同,递归验证123返回true,最终返回true
内容的提问来源于stack exchange,提问作者idan noyshul
相关产品推荐
相关产品推荐

