如何优化递归代码以生成并返回数字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 } }
代码解释
reverseNum辅助方法:用reversed参数累积反转结果,每递归一次就把当前数字的最后一位追加到reversed末尾,直到原数字被拆分为0,返回最终的反转值。reverse方法:对外提供的接口,初始化累积值为0,调用辅助递归方法。getDigitCount方法:递归计算原数的位数,用来确定原数需要左移多少位才能拼接反转数。generatePalindrome方法:组合前面的逻辑,先获取反转数和原数位数,再通过数学运算完成拼接,返回最终的回文数。
内容的提问来源于stack exchange,提问作者KlemenPl
相关产品推荐
相关产品推荐

