能否仅用1个参数通过递归实现乘法表打印?
用单个参数实现递归乘法表打印
当然可以实现,以下是两种可行方案,均不使用循环:
方案1:重载辅助方法(推荐,无副作用)
通过对外暴露单参数方法,内部调用带双参数的辅助递归函数,既满足你单参数的需求,又避免状态依赖问题:
public class MultiTable { // 对外提供的单参数入口方法 public static void rec(int n) { System.out.println("n=" + n + ":"); // 调用内部辅助递归,初始乘数从1开始 recHelper(n, 1); } // 私有辅助递归方法,负责核心逻辑 private static void recHelper(int n, int i) { if (i > 10) { return; } System.out.println(n + " x " + i + " = " + n * i); recHelper(n, i + 1); } public static void main(String[] args) { rec(4); } }
方案2:使用静态变量记录乘数(不推荐,有状态依赖)
如果不想额外写辅助方法,可以用静态变量保存当前的乘数,但这种方式存在状态副作用,多次调用前需要重置变量,否则会出错:
public class MultiTable { private static int current = 1; public static void rec(int n) { // 首次调用时打印标题 if (current == 1) { System.out.println("n=" + n + ":"); } if (current > 10) { // 重置变量,避免影响下次调用 current = 1; return; } System.out.println(n + " x " + current + " = " + n * current); current++; rec(n); } public static void main(String[] args) { rec(4); // 若要再次调用,直接执行rec(5)即可,变量会自动重置 // rec(5); } }
说明
- 方案1是更规范的写法,将递归逻辑封装在私有辅助方法中,对外只暴露单参数接口,没有状态污染问题,适合大多数场景。
- 方案2虽然满足单参数要求,但依赖静态变量保存状态,在多线程环境或者多次调用时容易出问题,仅适合简单的单次调用场景。
内容的提问来源于stack exchange,提问作者tykeaboyloy
相关产品推荐
相关产品推荐

