php递归函数,性能给力

function arPro($data,$res=array(),$pid=‘0‘,$level=‘0‘){
  foreach ($data as $k => $v){
    if($v[‘comment_parent‘]==$pid){
      $res[$v[‘id‘]][‘info‘]=$v;
      if($level!=‘0‘){
        if($v[‘level‘]==$level){
          $child=null;
        }
        else{
          $child=arPro($data,array(),$v[‘comment_id‘],$level+1);
        }
        $res[$v[‘id‘]][‘child‘]=$child;
      }
      else{
        $child=arPro($data,array(),$v[‘comment_id‘]);
        if($child==‘‘||$child==null){
            $res[$v[‘id‘]][‘child‘]=null;
        }
        else{
            $res[$v[‘id‘]][‘child‘]=$child;
        }
      }
    }
  }
  return $res;
}

  

时间: 2024-08-12 15:01:38

php递归函数,性能给力的相关文章

递归函数初探讨

什么是递归? 所谓的递归 ,就是函数自己直接或者间接的调用自己.复杂算法通常比较容易使用递归实现 从前有座山,山里有座庙,庙里有个老和尚讲故事,从前有座山,山里有座庙,庙里... 这个故事就是现实中递归的一个例子,循环往复,生生不息. 以下就是递归函数最简单的一个例子 function foo(n){ return n + foo(n-1); } foo(); 递归中最重要的就是如何跳出循环,因为只有程序跳出了才有结果.如果定义错误,或者缺少终结条件 可导致冻结用户界面 递归的思想:划归思想 递

JavaScript (JS) 面向对象编程 浅析 (含对象、函数原型链解析)

1. 构造函数原型对象:prototype ① 构造函数独立创建对象,消耗性能 function Person(name) { this.name = name; this.sayHello = function () { console.log("Hello,my name is " + this.name) } } var P1 = new Person("Tom"); var P2 = new Person("Jim"); P1.sayHe

如何将递归转换为非递归

递归函数具有很好的可读性和可维护性,但是大部分情况下程序效率不如非递归函数,所以在程序设计中一般喜欢先用递归解决问题,在保证方法正确的前提下再转换为非递归函数以提高效率. 函数调用时,需要在栈中分配新的帧,将返回地址,调用参数和局部变量入栈.所以递归调用越深,占用的栈空间越多.如果层数过深,肯定会导致栈溢出,这也是消除递归的必要性之一.递归函数又可以分为尾递归和非尾递归函数,前者往往具有很好的优化效率,下面我们分别加以讨论. 尾递归函数 尾递归函数是指函数的最后一个动作是调用函数本身的递归函数,

LeetCode962. 最大宽度坡

问题:最大宽度坡 给定一个整数数组 A,坡是元组 (i, j),其中  i < j 且 A[i] <= A[j].这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在,返回 0 . 示例 1: 输入:[6,0,8,2,1,5] 输出:4 解释: 最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5. 示例 2: 输入:[9,8,1,0,1,9,4,0,4,1] 输出:7 解释: 最大宽度的坡为 (i, j) = (2, 9): A[2] =

(转载)提高ASP.NET Web应用性能的技巧

在这篇文章中,将介绍一些提高 ASP.NET Web 应用性能的方法和技巧.众所周知,解决性能问题是一项繁琐的工作,当出现性能问题,每个人都会归咎于编写代码的开发人员. 那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置为「true」是非常有用多,但在应用程序发布部署时,需将其设置为「false」. ? 1 <compilation default

使用JAVA直观感受快速排序与冒泡排序的性能差异

初学算法,肯定会编写排序算法 其中两个最为有名的就是冒泡排序和快速排序 理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN) 下面本门使用JAVA,分别编写三段排序程序 对十万个0-9999的整数进行一次冒泡排序 对十万个0-9999的整数进行1000次快速排序,使用递归完成 对十万个0-9999的整数进行1000次快速排序,使用堆栈完成 对十万个0-9999的整数进行一次冒泡排序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

前端要给力之:红绿灯大战中的火星生命-Promise

目录 目录 传说的开始 看到winter的代码我的第一反应是全无promise的精髓 其实我了解Promise也是新近的事情 我与Promise后来发生的故事 红绿灯大战的亲历实录 Promise写出来怎么会是这个样子 欢迎回到火星 感谢米粽粽同学提到我的一篇旧文 第一步的抽象 一点说明前提 重新定义问题 Promise的编程基础之逻辑过程 如何确认一个数据就绪 然后then只能处理一个数据 最后任何情况下then总是立即返回一个promise 解决问题的方法 得到一些基础件 如何在Promis

前端页面性能参数搜集

经常会看些性能分析的书,但是实际在做优化的时候又无从下手. 因为没有数据,也不能确定实际用户到底在哪一环影响了他们的性能. 现在H5提供了一些很方便的Performance接口,可以让我们更方便的搜集到用户的数据,不过有几个方法的兼容性实在太差. 插件已经上传到Github中,可以在这里获取到,index.html中写的是一些示例,插件源码在"js/primus.js"中. 写的比较仓促,自己能力也有限,如有问题,欢迎指正. 一.请求时间统计 上图是performance.timing

Qt 框架的图形性能高,网络性能低,开发效率高——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统

-----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层毕竟是C++,而且Qt的模块写的也不错,做过很多优化,这个渲染的性能在桌面上与有硬件加速的框架比差别不大,除非是有很多动画的复杂场景才能看出区别.不过在手机上或者嵌入式上,就会明显觉得widgets的渲染性能低了. 那么怎么办呢,Qt是不会抱死在widgets一个框架上的.所以Qt推出了Quick和