递归为什么在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);
}
}
# 1 楼答案
实际上不需要递归函数是静态的。大多数教程都将其保持为静态,这样就可以轻松演示其用法,而无需创建定义递归函数的类的新实例
如果它是一个非静态递归函数,那么需要创建一个新实例来调用该函数。而静态函数可以由类本身访问,而无需创建相同的实例
查找阶乘的递归函数的一个简单示例如下:
# 2 楼答案
不,他们不应该这样做。你之所以会这样,仅仅是因为你开始从一个静态方法调用你的方法,这个静态方法是
main
,并且可能开始一个接一个地修复错误main
是静态的,因此不能隐式地假定this
引用。另一种“非静态”的写作方式是# 3 楼答案
我认为你的问题从一个好的类设计指南的角度来看是有意义的,它应该是静态的,因为让我们看看计算阶乘n的阶乘(int n)方法,它应该是静态的,因为它独立于任何特定的实例。定义本应是静态的实例方法是常见的设计错误。 如果一个方法不依赖于一个特定的实例,那么它应该是一个静态方法。 参考资料:丹尼尔·梁的《Java编程入门》