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

如何优化递归代码以生成并返回数字n的回文数

递归实现数字回文拼接(原数+反转数)

我来帮你搞定这个需求!你当前的代码只能打印反转后的数字,但没办法保存反转后的数值,自然没法完成原数和反转数的拼接。咱们调整一下思路,让递归函数返回反转后的数值,再通过计算把原数和反转数组合成目标回文数。

优化思路

  • 把递归逻辑从打印反转结果改成返回反转后的数值,这样就能保存反转值用于后续拼接。
  • 计算原数的位数,通过原数 × 10^位数把原数左移,留出位置来拼接反转数。
  • 最后把左移后的原数和反转数相加,得到最终的回文数。

优化后的完整代码

public class PalindromeGenerator {
    // 辅助递归方法:累积反转结果
    private static int reverseNum(int n, int reversed) {
        if (n == 0) {
            return reversed;
        }
        // 每次将当前数字的最后一位追加到反转结果末尾
        reversed = reversed * 10 + n % 10;
        return reverseNum(n / 10, reversed);
    }

    // 对外的反转方法,初始化累积值为0
    public static int reverse(int n) {
        return reverseNum(n, 0);
    }

    // 递归计算数字的位数
    private static int getDigitCount(int n) {
        if (n < 10) {
            return 1;
        }
        return 1 + getDigitCount(n / 10);
    }

    // 生成目标回文数:原数拼接反转数
    public static int generatePalindrome(int n) {
        int reversed = reverse(n);
        int digitCount = getDigitCount(n);
        // 原数左移对应位数后,加上反转数完成拼接
        return n * (int) Math.pow(10, digitCount) + reversed;
    }

    public static void main(String[] args) {
        System.out.println(generatePalindrome(3));    // 输出:3
        System.out.println(generatePalindrome(13));   // 输出:1331
        System.out.println(generatePalindrome(133));  // 输出:133331
    }
}

代码解释

  1. reverseNum辅助方法:用reversed参数累积反转结果,每递归一次就把当前数字的最后一位追加到reversed末尾,直到原数字被拆分为0,返回最终的反转值。
  2. reverse方法:对外提供的接口,初始化累积值为0,调用辅助递归方法。
  3. getDigitCount方法:递归计算原数的位数,用来确定原数需要左移多少位才能拼接反转数。
  4. generatePalindrome方法:组合前面的逻辑,先获取反转数和原数位数,再通过数学运算完成拼接,返回最终的回文数。

内容的提问来源于stack exchange,提问作者KlemenPl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:43