Java递归实现无辅助函数计算整数首位和末位数字之和
原有代码问题
- 进入方法后未先判断终止条件就直接触发递归调用,会直接导致无限递归,最终抛出栈溢出异常
- 逻辑设计完全错误:既没有正确提取首位数字,还重复对末位进行求和,无法得到正确结果
正确递归实现
public static int sumOfFirstandLastdigits(int number) { // 处理负数输入,转成正数计算,不影响首尾数字的值 if (number < 0) { number = -number; } // 终止条件:个位数的首尾都是本身,求和为2倍原值 if (number < 10) { return number * 2; } // 递归计算去掉末位后的数字的首尾和 int subResult = sumOfFirstandLastdigits(number / 10); // 替换掉子结果里的旧末位,换成当前数字的末位,得到当前数字的首尾和 return subResult - (number / 10 % 10) + number % 10; }
逻辑验证
用题目给出的示例验证:
- 输入
4:命中终止条件,返回4*2=8,符合要求 - 输入
137:递归计算sum(13),sum(13)递归计算sum(1)=2,sum(13)返回2 -1 +3=4,最终sum(137)返回4 -3 +7=8,符合要求 - 输入
1234:逐层递归最终得到首位1,替换末位后得到1+4=5,符合要求
内容的提问来源于stack exchange,提问作者WinnyPoh
相关产品推荐
相关产品推荐

