首页 > 解决方案 > 为什么我们必须将方法声明为静态以在 java 中进行递归调用?

问题描述

谁能告诉我为什么Java中递归调用的方法应该是静态的?

class abc {
    static void fun(int n) {
        if (n > 0) {
            System.out.println(n);
            fun(n - 1);
        }
    }

    public static void main(String args[]) {
        int x = 3;
        fun(x);
    }
}

标签: javarecursionstatic

解决方案


不,他们不应该。您可能是这种情况的原因仅仅是因为您开始从静态方法调用您的方法main,并且可能开始修复另一个错误。

是静态的main,因此不能this隐式假设引用。另一种“非静态”的写作方式是

class abc {
   void fun(int n) {
    if (n > 0) {
        System.out.println(n);
        fun(n - 1);
    }
}

public static void main(String args[]) {
    int x = 3;
    abc a = new abc();
    a.fun(x);
}
}

推荐阅读