Java递归printOut函数输出异常:仅打印首位数字,求修改方案
修复递归打印正整数的printOut函数问题
你的代码问题出在递归逻辑不完整:只有当n < 10时才调用printDigit,递归的上层调用(比如处理7623、762这些数)没有打印当前数的最后一位,导致最终只输出了最高位的7。
正确的逻辑应该是:不管n是否大于等于10,在递归处理完高位之后,都要打印当前数的最后一位(n%10)。去掉else分支,把printDigit调用放在递归之后即可。
修正后的完整代码:
public class PrintOutTest { public static void main(String[] args) { Print.printOut(76234); } } class Print { public static void printOut(int n) { if (n >= 10) { printOut(n / 10); } // 移除else,无论是否递归,都打印当前数字的最后一位 printDigit(n % 10); } static void printDigit(int n) { System.out.print(n); } }
逻辑说明
以输入76234为例,递归执行流程如下:
printOut(76234)→ 递归调用printOut(7623)printOut(7623)→ 递归调用printOut(762)printOut(762)→ 递归调用printOut(76)printOut(76)→ 递归调用printOut(7)printOut(7)→ 不满足n>=10,直接执行printDigit(7),输出7- 回到
printOut(76),执行printDigit(6),输出6 - 回到
printOut(762),执行printDigit(2),输出2 - 回到
printOut(7623),执行printDigit(3),输出3 - 回到
printOut(76234),执行printDigit(4),输出4
最终终端会完整输出76234。
内容的提问来源于stack exchange,提问作者AProgrammer
相关产品推荐
相关产品推荐

