递归

php 递归和非递归以及SPL遍历目录下的所有文件

北城余情 提交于 2020-03-01 02:40:11
//php 递归实现遍历 用dir 返回对象 <? function loop($dir){ $mydir =dir($dir); //以对象的形式访问 while($file = $mydir ->read()){ //目录中有隐藏文件'.'和'..' 遍历的时候需要注意 if((is_dir("$dir/$file")) && ($file!=".") && ($file!="..")){ echo $file.'</br>'; loop("$dir/$file"); //递归循环 }else{ if($file!=".." && $file!="."){ echo $file."</br>"; } } } } loop(dirname(__FILE__)); //dirname 去掉文件名返回目录名 非递归处理遍历目录 思路: 首先创建一个数组,因为第一次传的是一个去掉文件名的目录名(如 c://wamp/www/php) 进行foreach 循环 所以第一次把C://wamp/www/php 下的全部文件都放入到了 数组中 /只够进行 while大循环 每次输出数组的最后一个,当文件为目录的时候在此进行foreach循环 知道最后一个值时count($list)值为0 退出循环 function scanAll($dir) { $list = array(); $list[

23.python递归函数介绍

风格不统一 提交于 2020-03-01 00:49:44
不断的对于某操作重复调用执行称为递归调用,递归函数执行的这个过程中只有进栈(开辟空间),没有出栈,直到最后一次调用完毕了,才逐个出栈,所以递归函数在执行的时候非常的占用内存资源;如果执行的次数过多了,会产生内存溢出的现象;所以一定要控制递归的层数,当符合某一条件时要终止递归调用,几乎所有的递归都能用while循环来代替;所以对于递归要慎用!!! 递归函数: 在某个函数中,调用其本身(函数自己调用自己),这个函数整体我们称为递归函数。 如何定义递归函数?(先假设此函数已经实现) 考虑切入点:(1).寻找一个临界点(结束点);(2).本次的函数执行不能满足最终的整体需求,所以还需要再次的去调用此函数;(找到后者和前者之间的关系,体现:后者的调用结束会将前者需要的数据返回回来) 优点:递归可以把问题简单化,让思路使为清淅,代码更简洁。缺点:递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果。 演示递归函数调用自身: 1 # 直接调用自身: 2 def f(): 3   f() 4 5 f() 1 # 间接调用自身: 2 def fa(): 3  fb() 4 def fb(): 5   fa() 6 7 fa() 代码演示示例: 1 # 递归求和:0 + 1 + 2 + 3 + 4 + ..... + n 的和 2 def mysum(n): 3 if n == 0: 4

Python开发【第三篇】:Python基础之函数

孤街浪徒 提交于 2020-02-29 23:37:59
一、背景 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下: while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 腚眼一看上述代码,if条件语句下的内容可以被提取出来公用,如下: def 发送邮件(内容) #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 while True: if cpu利用率 > 90%: 发送邮件('CPU报警') if 硬盘使用空间 > 90%: 发送邮件('硬盘报警') 对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别: 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 函数式编程最重要的是增强代码的重用性和可读性 二、定义和使用 def 函数名(参数): ... 函数体 ... 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名

54.二叉树搜索树的第k大节点

不羁的心 提交于 2020-02-29 20:08:01
以前一直用的都是中序遍历的正常模式,就是左根右,这一次居然是左右根,从来没想到这么用过,这道题提醒我了。 就是设置一个全局count,当count为1时,说明当前节点就是目标节点,返回值就行,这里要注意的是返回值的时候count依然要减1,不然的话对于递归的上一层来说count还是等于1就依然会更新res的值,代码如下: 来源: CSDN 作者: qq_40058686 链接: https://blog.csdn.net/qq_40058686/article/details/104574342

表达式求值(from leetcode 241)

北战南征 提交于 2020-02-29 17:48:22
给定一个正确的表达式(不用担心不规范的输入),比如 2-1-1, 通过在不同位置添加左右括号,改变求值的优先级顺序,求出所有的这些值; Example 1 Input: "2-1-1" . ((2-1)-1) = 0 (2-(1-1)) = 2 Output: [0, 2] Example 2 Input: "2*3-4*5" (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10 Output: [-34, -14, -10, -10, 10] 这个题目应该没有便捷的解法,只能全部的都尝试一遍;当然仅仅需要暴力的枚举一遍,也没有什么有趣的地方,我觉得有趣的地方体现在下面两点: 1. 这个题目可以用递归的方法求解,因为,假设遇到某个操作符,如果知道了左边的结果,再计算出右边的结果,那么只要把左右两边的结果合并起来,就可以了; 2. 当然如果直接按照递归去做,会出现一个问题,(大概会超时,我没有提交这样的代码);假设在得到了某个操作符两边的结果后,到了下一个操作符,递归计算的时候,任然会需要前面一个操作符(左边的)的结果,所以必须要把已经计算过的结果要cache起来; 最后的代码如下: private final static long

【linux命令】lftp scp rsync wget

浪尽此生 提交于 2020-02-29 16:42:25
【lftp】 lftp是Linux下的一个ftp客户端,用于登陆远程的FTP服务器。使用它的mirror命令可以把本地的文件通过lftp备份到远程FTP服务器上。 lftp [ -d ] [ -e cmd ] [ -p port ] [ -u user [ , pass ]] [ site ] lftp -f script _ file lftp -c commands lftp --version lftp --help 1、lftp登陆,随后就和其它命令行的ftp工具一样使用ftp内部命令进行控制 lftp -p 21 -u admin,123456 ftp.aaa.com #表示使用用户名admin、密码123456登陆ftp.aaa.com这个站点,端口为21。 2、lftp的mirror命令,lftp登陆成功后,使用mirror命令用来备份文件。 将远程服务器上的文件备份到本地: mirror [选项] [远程目录] [本地目录] 将本地文件备份到远程服务器上: mirror -R [其它选项] [本地目录] [远程目录] 常用选项: -c, --continue :如果镜像过程中连接中断,重新开始。 -e, --delete :删除不在远程服务器上的本地文件。 -n, --only-newer :下载远程服务器上的新文件,不能和-c一起用。 -R, --reverse

permutations全排列的递归算法(c++实现)

风流意气都作罢 提交于 2020-02-29 15:48:12
算法实现原理: 假如abc排列组合会得到abc,acb,bac,bca,cab,cba六种情况。 1)首先将abc的第一个字母放到三者中的第一位得到abc,接着剩下两个字母bc,可以将bc中的第一个字母放到两者中的第一位得到abc,也可以将bc中的第二个字母放到两者中的第一位得到acb。 2)将abc的第二个字母放到三者中的第一位得到bac,接着剩下两个字母ac,可以将ac中的第一个字母放到两者中的第一位得到bac,也可以将ac中的第二个字母放到两者中的第一位得到bca。 … 以此类推。 如果按以上的算法计算acc的排列组合,那么会得到acc,acc,cac,cca,cca,cac六种情况。 那么需要排除其中重复的情况。 对重复的元素序列进行排列组合: 在交换并且进行递归的时候,需要判断交换的两者之间是否有与后者相同的数。比如在计算acc的排列组合时,将acc的第三个字母放到三者中的第一位与将acc的第二个字母放到三者中的第一位是重复的情况,那么则不需要将第三个字母放到第一位进行排列。 代码实现: #include <iostream> using namespace std; void perm(char*, const int, const int); bool isHaveSame(char*, const int, const int); int main() { char

php递归实现无限级分类树

浪尽此生 提交于 2020-02-29 15:31:54
PHP实现无限极分类的两种方式,递归和引用 1 $array = array( 2 array('id' => 1, 'pid' => 0, 'name' => '河北省'), 3 array('id' => 2, 'pid' => 0, 'name' => '北京市'), 4 array('id' => 3, 'pid' => 1, 'name' => '邯郸市'), 5 array('id' => 4, 'pid' => 2, 'name' => '朝阳区'), 6 array('id' => 5, 'pid' => 2, 'name' => '通州区'), 7 array('id' => 6, 'pid' => 4, 'name' => '望京'), 8 array('id' => 7, 'pid' => 4, 'name' => '酒仙桥'), 9 array('id' => 8, 'pid' => 3, 'name' => '永年区'), 10 array('id' => 9, 'pid' => 1, 'name' => '武安市'), 11 ); 递归算法 1 /** 2 * 递归实现无限极分类 3 * @param $array 分类数据 4 * @param $pid 父ID 5 * @param $level 分类级别 6 * @return $list

Javascript中递归的调用

青春壹個敷衍的年華 提交于 2020-02-29 03:32:20
  递归函数就是调用自身,如下所示: 1 function factorial(num){ 2 if(num<=1){ 3 return 1; 4 }else{ 5 return num*factorial(num-1); 6 } 7 }   这是经典的递归调用,但是执行如下代码时会导致出错。 1 var anotherFactorial=factorial; 2 factorial=null; 3 alert(anotherFactorial(3)); //Uncaught TypeError: factorial is not a function   上面的代码先把factorial()函数保存在anotherFactorial中,然后将factorial设置为null。结果指向原始函数的指针只剩下一个,在接下来的调用就会出现错误(factorial已经不是函数),此时使用 arguments.callee (即指向正在执行函数的指针)可以解决这个问题,即: 1 function factorial(num){ 2 if(num<=1){ 3 return 1; 4 }else{ 5 return num*aguments.callee(num-1); 6 } 7 }   但是在严格模式下,不能通过脚本访问aguments.callee。最好的解决方法是使用 命名函数表达式

递归

情到浓时终转凉″ 提交于 2020-02-28 19:47:56
假设有一块地图,从出发点到终点,有很多种路径,我们可以指定路径策略来指定先后顺序。 public class Hello { public static void main ( String [ ] args ) { //创建二维数组 int [ ] [ ] map = new int [ 8 ] [ 7 ] ; //1代表墙,上下 for ( int i = 0 ; i < 7 ; i ++ ) { map [ 0 ] [ i ] = 1 ; map [ 7 ] [ i ] = 1 ; } //左右 for ( int i = 0 ; i < 8 ; i ++ ) { map [ i ] [ 0 ] = 1 ; map [ i ] [ 6 ] = 1 ; } //中间的实墙 map [ 3 ] [ 1 ] = 1 ; map [ 3 ] [ 2 ] = 1 ; //输出看一下 System . out . println ( "地图初始化" ) ; for ( int i = 0 ; i < 8 ; i ++ ) { for ( int j = 0 ; j < 7 ; j ++ ) { System . out . print ( map [ i ] [ j ] + " " ) ; } System . out . println ( ) ; } } } 地图初始化 创建一个方法