zoukankan      html  css  js  c++  java
  • 求解一个数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)。涉及到递归栈的调用,如果递归结束条件不恰当,会造成栈溢出。

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

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

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

  • 相关阅读:
    JAVA :: MVC
    顺序栈创建
    editplus 配置工具集
    链表之创建
    13.1.22:线性表之单链表
    Web 多线程作业
    给 Mac OS X Lion 刻一张安装光盘
    kubernetes组件之api 安装
    kubeadm 之k8s 多master 部署
    kubernetes集群之部署kubescheduler组件
  • 原文地址:https://www.cnblogs.com/128-cdy/p/12439610.html
Copyright © 2011-2022 走看看