Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归调用方法_Java_Recursion_Methods - Fatal编程技术网

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)。不确定这与递归有什么关系。。。您可以按照以下语法调用同一类的任何方法