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

能否仅用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:40:27