我无法绕过递归,更具体地说是我的教科书中提供的语法。它看起来像这样:
public int sum (int num)
{
int result;
if (num == 1)
result =1;
else
result = num +sum(num -1);
return result;
}
我特别对这一行感到困惑:
result = num + sum(num - 1);
每次在任何其他程序中,我不断绊倒的部分,我们从两种方式之一调用方法。方法是静态方法,并通过类名称后跟句点调用,后跟方法名称。 (例如:Math.random();) 或者,该方法已通过对象引用变量调用,该变量属于同一类。 (我们首先必须独立创建) 这个语法似乎没有遵循前面两个例子中的任何一个,我想知道为什么会这样?是因为我们从方法本身调用方法,从语法上讲它是如何完成的,还是我错过了什么?
答案 0 :(得分:3)
一个方法可以通过它的名称调用,没有任何点或导入如果调用者与方法在同一个类中。这是因为Java只使用点来导航到方法的类位置,但是如果调用该方法没有任何点,则程序将知道该方法在调用者的类中。您可以使用此方法调用所有类型的方法,只要它们位于同一个类或超类中。
以区号为例。当您拨打电话号码时,您将拨1,然后拨3位区号,然后拨7位号码。但是,如果您的手机在您拨打的号码的3位数区号内注册,则只需输入没有区号的7位数字。
答案 1 :(得分:3)
当一个方法只是通过名称调用而不是静态时,暗示你在this
上调用该方法。因此,您的代码等同于以下内容:
public int sum (int num) {
int result;
if (num == 1)
result =1;
else
result = num + this.sum(num -1);
return result;
}
对于为类定义的任何实例方法都是如此,而不仅仅是递归方法(在任何特定方式下,它们在语法上都不特殊)。
答案 2 :(得分:0)
在Java中,您不能将函数放在类之外,因此您不知何故强制将其写入类中。现在,您有两种方法:
静态 - 您可以将其视为放置在容器/命名空间内的“免费”函数(在这种情况下,类是容器)。
非静态 - 这是具有Java传递的特殊参数的方法:self
,其中包含实例数据,例如:
Foo a = new Foo();
a.bar(); // calls method bar from class Foo with a instance
现在,当您在静态或非静态方法中时,您具有周围类的范围,这意味着您可以使用其他类成员而无需添加self
或ClassName
。