递归实现  N!=N*(N-1)*(N-2)*(N-3)*(N-4)*......*3*2*1希望可以讲解下递归实现是应该如何去用递归!!!使用比较重要

解决方案 »

  1.   


    public class Test{
    public static void main(String[] args){
    int n = 5;
    int result = factorial(n);
    System.out.println(result);
    } public static int factorial(int n){
    if(n <= 0){
    System.out.println("Error input!");
    return 0;
    }
    if(n == 1){
    return n;
    }else{
    return n * factorial(n -1);
    }
    }
    }
      

  2.   

    public class Test{
        public static void main(String[] args){
            int n = 0;
            int result = factorial(n);
            System.out.println(result);
        }    public static int factorial(int n){
            if(n < 0){
                System.out.println("Error input!");
                return 0;
            }
            if(n == 0 || n ==1){
                return 1;
            }else{
                return n * factorial(n -1);
            }
        }
    }
    2楼有点遗漏,改下,每次都比上次更靠近目标,最终需要结束。
      

  3.   

    你试着分解下N!N! = N * (N-1)! = N * (N-1)* (N-2)!=...=N * (N-1) * (N-2)*... * 2 * 1!假设方法f(N)计算N!
    就可以得到
    f(N) = N * f(N-1),依此类推下去就可以得到递归方法了
    那么f(N)的递归结束条件自然就是f(1) 和 f(0) = 1,所以就可以写出这个方法public static long factorial(int n)
    {
        if (n <=1 ) return 1;
        return n * factorial(n-1);
    }
    跟上面二楼的代码没有太大区别,加上n < 0 的判断只是为了让程序更健壮、可靠对于返回值,int显然是不够的,long其实也不够,最好要用到BigInteger,你可以试试100!。