You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写递归函数判断数字奇偶交替及代码纠错

问题分析与修正

你的递归函数逻辑完全偏离需求,核心错误是没有比较相邻两位数字的奇偶性,仅通过判断最后一位是否为偶数+递归结果为true来返回值,这显然无法实现“奇偶交替”的判断。比如输入123时,原函数会错误返回false,但正确结果应为true。

错误示例验证

以输入123为例,原函数执行流程:

  1. 123>10,调用isAlternatingNumber(12)
  2. 12>10,调用isAlternatingNumber(1),返回true
  3. 回到12的处理:12%10=2,2是偶数且flag=true,返回true
  4. 回到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:55:16