Java 递归调用方法
我很难理解递归,更具体地说,是教科书中提供的语法。看起来是这样的:Java 递归调用方法,java,recursion,methods,Java,Recursion,Methods,我很难理解递归,更具体地说,是教科书中提供的语法。看起来是这样的: 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); 每次在其他程序中,我们都会从两种方法中的一种调用方法
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();)
或者,通过同一类的对象引用变量调用了该方法。(我们首先必须独立创建)
这个语法似乎没有遵循前面两个示例中的任何一个,我想知道为什么会这样?这仅仅是因为我们从方法本身内部调用方法,而这就是它的语法实现方式,还是我遗漏了什么 如果调用程序与方法位于同一类中,则可以通过其名称调用方法,而不需要任何点或导入。这是因为Java只使用点来导航到方法的类位置,但是如果在没有任何点的情况下调用该方法,那么程序将知道该方法在调用程序的类中。您可以使用此方法调用所有类型的方法,只要它们位于同一类或超类中
以区号为例。当你在手机上拨打一个号码时,你会先拨一个1,然后是一个3位数的区号,然后是一个7位数的号码。但是,如果您的手机注册在您所拨打号码的3位区号内,则您只需键入7位号码,而不必键入区号。当一个方法仅通过其名称调用且不是静态的时,这意味着您正在调用此上的方法。因此,您的代码相当于以下代码:
public int sum (int num) {
int result;
if (num == 1)
result =1;
else
result = num + this.sum(num -1);
return result;
}
这对于为类定义的任何实例方法都是正确的,而不仅仅是递归方法(在任何特定的方式中,它们在语法上都不特殊)。在Java中,您不能将函数放在类之外,所以您不得不在类内部编写它。现在,您有两种类型的方法: 静态-您可以将其视为放置在容器/命名空间中的“自由”函数(在本例中,类就是容器) 非静态-这是一种方法,它具有Java传递的特殊参数:
self
,其中包含实例数据,例如:
Foo a = new Foo();
a.bar(); // calls method bar from class Foo with a instance
现在,当您在静态或非静态方法中时,您有一个周围类的范围,这意味着您可以使用其他类成员,而无需添加
self
或ClassName
高亮显示的行相当于result=num+this.sum(num-1)代码>。不确定这与递归有什么关系。。。您可以按照以下语法调用同一类的任何方法