2017-02-14 105 views
-3

我想知道为什么递归方法执行后,即使它执行return语句。我正在尝试编写一个简单的程序来计算输入的阶乘,但“4”的阶乘返回“48”,因为它将“2”乘以两次。请在下面找到我的代码。返回语句后执行Java递归

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    static int soln=0; 
    static boolean start = true; 

    public static void main(String[] args) { 
     Scanner sn = new Scanner(System.in); 
     int n=sn.nextInt(); 
     System.out.println(multx(n)); 
    } 

    public static int multx(int n){ 
     if (start){ 
     soln = n; 
     start = false; 
     } 

     while(n>2) 
     { 
     n--; 
     soln = soln*n; 
     multx(n); 
     } 
     return soln; 
    } 
} 

它为什么执行return soln,然后回去multx(n)

+1

它被称为递归:https://en.wikipedia.org/wiki/Recursion – Andremoniy

+1

我认为你没有得到什么是递归。 http://stackoverflow.com/questions/8183426/factorial-using-recursion-in-java检查这个答案计算在java中的递归 – Gatusko

回答

1

这就是递归的工作原理,它从被调用的方法返回后返回到multx(n)。将递归看作是相同代码的层和层,但是代码必须返回到它在任何时候被调用的地方。