当一个方法调用自身的return语句时会发生什么?递归.

Dav*_*und 1 java recursion

所以我在教程的帮助下制作了这个简单的代码.经历它我不太确定会发生什么return faktor(tall-1)*tall.

在return语句中,该方法调用自身并返回一个值.先发生什么事?它首先调用自身,还是首先返回值,或者它们是否同时发生?

当它返回值时会发生什么?

package enkelrekursjon1;

public class Enkelrekursjon1 {

    public static void main(String[] args) {

       System.out.print(faktor(3)); 
    }

    private static int faktor(int tall){
    System.out.print(tall); 
    if (tall != 1){
    return faktor(tall - 1)*tall; 
    }    
    return 1; 
    }

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

它的工作方式与返回值的返回语句始终有效:

  • 表达式被评估(在这种情况下faktor(tall - 1) * tall)
  • 该值将返回给调用者

评估表达式之前它不可能返回,因为没有值返回.

所以在你的情况下,如果你有电话,faktor(5)你最终会得到一个调用堆栈:

faktor(5)
   -> calls faktor(4)
         -> calls faktor(3)
               -> calls faktor(2)
                     -> calls faktor(1)
                           -> returns 1
                     -> returns 1 * 2 (i.e. 2)
               -> returns 2 * 3 (i.e. 6)
         -> returns 6 * 4 (i.e. 24)
   -> returns 24 * 5 (i.e. 120)
Run Code Online (Sandbox Code Playgroud)