求解一个数n的阶乘(递归求解 与 循环求解)

   输入一个数n,计算其阶乘的结果:value = 1*2*3*4......*(n-1)*n。

循环求解:(是很好理解的)

 private static int facyorialValue(int n) {
        int value = 1;
        for (int i = 1; i <= n; i++) {
            value = value * i;
        }
        return value;
    }

 其时间复杂度是O(N),空间复杂度是S(1)。#无论规模n是几,开辟的空间数是固定的#

递归求解:

private static int facyorialValue(int n) {
        if(n == 1){
            return 1;  //递归终止的条件
        }else {
            return facyorialValue(n-1) * n;
        }
    }

       递归的求解思想就是要求 n 的阶乘,只要知道前 (n-1) 项阶乘的结果,再与n相乘即可。其时间复杂度是O(N),空间复杂度是S(N)。涉及到递归栈的调用,如果递归结束条件不恰当,会造成栈溢出。

从代码的角度分析:(递与归的过程)

      循环的调用自己,直到遇到确切的返回值,并且将最终的结果返回。

       两种方法的都是可以的,但是更推荐使用循环求解,递归会有栈的内存的分配,会是一种资源的消耗。

原文地址:https://www.cnblogs.com/128-cdy/p/12439610.html