浅谈循环与递归的优劣 DK

<p>在任何程序语言中,几乎都能看到循环,而递归则用的比较少,我是从C开始接触递归的.例如 求M的阶乘,那么什么是递归呢,简单来说,递归就是循环,举个例子</p><div><pre name="code" class="html">


 

</pre><pre name="code" class="java">        public  int  digui(int a){
           if(a>1){
               return  a*digui(a-1);
             }else{
               return  a;
              }
       }

  那么,递归就是程序自己调用自己,上面是阶乘的事例.递归一般用于生成树等方面,循环就不举例了.想上述是比较简单的递归,举个复杂点的例子

  

</pre><pre name="code" class="html">       <pre name="code" class="html"> public Map<string,object>  tree(Map<string,object> map){
        Map<string,object> tree =  new HashMap<string,object>();
         tree = (Map<string,object>) map.get("tree");
         if(tree!=null){
           tree(tree);
          }
}

  这是稍微复杂点的递归,可以看到,每一次调用函数,就会创建一个新的Map(当然,上述程序中也不是必须创建的,只是用来书名问题),假设一下,这个递归会调用自身10W次,那么,内存中会存在10W个map, 

  这时候有人会想到GC,

  好的,java中的确有GC回收机制,那么GC回收机制是怎么回收的呢?

   java在jvm启动时,会自动分配一个线程,此线程是系统自动创建,用户可以用System.gc();调用,但是我没看见哪个智障写过这样的代码.敢写的不是智障就是大咖

   gc是怎么调用的呢?定时,你没看错,就是定时,意思是,当变量在作用域外之后,java程序无法使用该变量之后,但是如果你记录了该变量在内存的地址,你可以尝试用指针调用下(求大咖尝试).

  悲催的是,你在递归时,十万个MAP并不会被立即回收,还在内存中,那,就是垃圾!!!!!!!!!!

  因此,递归要合理的调用,因为有些业务用递归的确更方便.

  联想到循环,也尽量被在循环中定义变量可以这样玩

   

  int a =0;
   for(xx;xx;xx){
    a = xx;
   }
  一句话,变量是好,亲们请合理使用!(此博客纯属个人理解,求打脸!!!)

  

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值