递归

文件目录结构、文件命名规范、文件系统结构、linux应用程序的组成、绝对路径和相对路径、目录名和基名、切换目录、显示当前的工作目录、列出目录或者文件、linux下的目录类型、文件通配符、复制文件和文件夹、链接、查看文件类型、管道

假装没事ソ 提交于 2020-02-12 14:59:11
文件目录结构 文件和目录被组织成一颗倒置的树状结构 文件系统从根开始,“/” 文件名称严格区分大小写 隐藏文件以"."开头 路径的分隔符为"/" 文件命名规范 文件字符最长为255个字符 包括路径在内文件名称最长为4095个 颜色表示 蓝色 ---> 文件夹 绿色 --> 可执行文件 红色 --> 压缩文件 蓝绿色 --> 链接文件 灰色-->其他文件 白色 --> 文件 除了斜杠和NULL,其他所有字符都可以使用 对大小写敏感 文件系统结构 /boot 引导文件的存放位置,内核文件、引导加载器都在此目录 /bin 所有的用户都可以使用的命令 /sbin 管理类的命令 /lib 启动时程序使用的基本库文件 .so结尾 /lib64 专门存放X86_64系统上得辅助库文件 /etc 存放配置文件 /home/USERNAME 普通用户的家目录 /root 管理员的家目录 /media 便携式移动设备的挂载点 /mnt 临时文件的挂载点 /dev 设备文件和特殊文件的存放位置 /opt 第三方的应用的安装位置 /tmp 临时文件的存放位置 /usr 存放安装程序 /var 存放经常变化的文件,比如日志 /proc 存放内核启动和进程相关的虚拟文件 /sys 输出当前系统上的硬件相关的文件 /srv 系统上允许的服务用到的数据 linux应用程序的组成 二进制文件 /bin /sbin

2-路归并排序的递归写法

最后都变了- 提交于 2020-02-12 08:15:21
《算法笔记》中摘取 2-路归并排序的递归写法非常简单,只需要反复将当前区间[left, right]分为两半,对两个子区间[left, mid]与[mid +1, right]分别递归进行归并排序,然后将两个已经有序的合并为有序序列即可。 const int maxn = 100; //将数组A的[L1, R1]与[L2, R2]区间合并为有序区间(此处L2记为R1 + 1) void merge(int A[], int L1, int R1, int L2, int R2) { int i = L1, j = L2; //i指向A[L1], j指向A[L2] int temp[maxn], index = 0; //temp临时存放合并后的数组,index为其下标 while(i <= R1 && j <= R2) { if(A[i] <= A[j]) { //如果A[i] <= A[j] temp[index++] = A[i++]; //将A[i]加入序列temp } else { //如果A[i] > A[j] temp[index++] = A[j++];//将A[j]加入序列temp } } while(i <= R1) temp[index++] = A[i++]; //将[L1, R1]的剩余元素加入序列temp while(j <= R2) temp[index

递归算法之基础练习

拜拜、爱过 提交于 2020-02-11 23:54:40
递归的定义: 一个函数自己直接或间接调用自己。 我们只要把下面两个基本的问题搞明白就差不多理解了递归的含义。 ( 这里需要注意的是我们写递归的时候一定要有个递归出口、不然会导致栈溢出异常 ) /** * 递归的复习与巩固 * @author qiu * 定义:一个函数自己直接或间接调用自己。 */ public class Recursion { public static void main ( String [ ] args ) { //求阶乘 n!的问题可以看成n*(n-1)! int num = factorial ( 10 ) ; System . out . println ( num ) ; //求1+2+3....+n的和 int sum = factorial1 ( 5 ) ; System . out . println ( sum ) ; } public static int factorial ( int N ) { //递归函数 if ( N == 1 || N == 0 ) { //递归结束出口 return 1 ; } else if ( N < 0 ) { //递归结束出口 return - 1 ; } else { return N * factorial ( N - 1 ) ; } } private static int factorial1

递归专题---[2]开根号

一曲冷凌霜 提交于 2020-02-11 20:59:44
0.简介 开根号,在C++中sqrt就可以解决,实际怎么写呢? 1.推导开根号计算方法 这里采用连分数逼近方法,例如对2开根号可以做如下操作。 公式 然后发现这个式子是可以递归的,就写出如下代码。 double mySqrt(double x) { static int t = 0; return t++==10 ? 0 : 1+((x-1)/(mySqrt(x)+1)); } int main() { cout << mySqrt(2) << endl; return 0; } 来源: CSDN 作者: ARTELE 链接: https://blog.csdn.net/ARTELE/article/details/104267570

day23(023-递归练习)

丶灬走出姿态 提交于 2020-02-11 17:37:33
23.01_File类递归练习(统计该文件夹大小) * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小(字节?) * * 从键盘接收一个文件夹路径 * 1,创建键盘录入对象 * 2,定义一个无限循环 * 3,将键盘录入的结果存储并封装成File对象 * 4,对File对象判断 * 5,将文件夹路径对象返回 * * 统计该文件夹大小 * 1,定义一个求和变量 * 2,获取该文件夹下所有的文件和文件夹listFiles(); * 3,遍历数组 * 4,判断是文件就计算大小并累加 * 5,判断是文件夹,递归调用 Test1 package com.heima.test; import java.io.File; import java.util.Scanner; public class Test1 { /** * @param args * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 * * 从键盘接收一个文件夹路径 * 1,创建键盘录入对象 * 2,定义一个无限循环 * 3,将键盘录入的结果存储并封装成File对象 * 4,对File对象判断 * 5,将文件夹路径对象返回 * * 统计该文件夹大小 * 1,定义一个求和变量 * 2,获取该文件夹下所有的文件和文件夹listFiles(); * 3,遍历数组 * 4,判断是文件就计算大小并累加 * 5,判断是文件夹

一个简单的全排列的递归实现

 ̄綄美尐妖づ 提交于 2020-02-11 12:23:19
#include<cstdio> int p[99], hashtable[99] = {false}, n;//数组p存储当前的排列,用hashtable[i]的真(/假)表示数i在当前排列p中出现(/没出现)过 //当前处理排列的第index位 void solvep(int index){ if(index == n + 1){ //递归边界,已处理了前n位 for(int i = 1; i <= n; i++) //输出当前数列 printf("%d", p[i]); printf("\n"); return; } for(int i = 1; i <= n; i++){ //试图将1~n填入第index位中 if(hashtable[i] == false){ p[index] = i; hashtable[i] = true; solvep(index + 1); hashtable[i] = false; } } } int main(){ n = 4; solvep(1); return 0; } 来源: CSDN 作者: 阿斯蒂芬解开了 链接: https://blog.csdn.net/z_nemo/article/details/104259846

关于递归的一些小练习

一笑奈何 提交于 2020-02-11 06:59:31
递归 什么是递归 在程序中, 所谓的递归, 就是函数自己直接或间接的调用自己. 直接调用自己 间接调用自己 就递归而言最重要的就是跳出结构. 因为跳出了才可以有结果. 所谓的递归就是化归思想 递归的调用, 写递归函数, 最终还是要转换为自己这个函数. 假如有一个函数 f, 如果它是递归函数的话, 那么也就是说 函数体内的问题还是转换为 f 的形式. 递归思想就是将一个问题转换为一个已解决的问题来实现 function f() { ... f( ... ) ... } 例子: 1, 2, 3, 4, 5, ..., 100 首先假定递归函数已经写好, 假设是 foo. 即 foo( 100 ) 就是求 1 到 100 的和 寻找递推关系. 就是 n 与 n-1, 或 n-2 之间的关系: foo( n ) == n + foo( n - 1 ) var res = foo( 100 ); var res = foo( 99 ) + 100; 将递推结构转换为 递归体 function foo( n ) { return n + foo( n - 1 ); } * 将 求 100 转换为 求 99 * 将 求 99 转换为 求 98 * ... * 将求 2 转换为 求 1 * 求 1 结果就是 1 * 即: foo( 1 ) 是 1 将临界条件加到递归体中 function foo(

LambdaParser的实现

三世轮回 提交于 2020-02-11 05:26:02
之前在GoogleCode里创建的项目 LambdaParser ,好久没管了,前两天进去一看,居然PR值是4,很是奇怪,搜了一下,几乎没任何反向链接,搞不懂PR值为什么会这么高。 既然Google这么看重它,那我也不能把它荒废了:)最近.NET4.0已经出来了,Expression已经支持代码块了(以前只支持表达式,区别就是以前不能写多个语句,现在可以了),像if、while、switch等等这些都已经支持了,那么现在的Expression理论上讲已经可以表达任何方法体了。只可惜不知微软出于什么考虑(也许是担心LINQ这边误用吧,这个功能是用来为Dynamic Language Runtime 即DLR服务的,不是LINQ),不能直接将代码块转换成表达式树。如: Expression<Action<string>> action = (m=> { MessageBox.Show(m.Length); MessageBox.Show(m); }); 这种写法以前不行,现在仍然不行。因为这是个代码块。(对表达式树不熟悉的可以看看这篇文章: 表达式树基础 ) 那么,想要构造代码块就得用Expression手动慢慢拼了。这是件痛苦的事情。当然,LambdaParser的下一步就是要解决它,有了BlockExpression、SwitchExpression 这些的东西

php实现快速排序

老子叫甜甜 提交于 2020-02-11 05:14:53
首先我们要理解一下快速排序的原理: 找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组,遍历整个数组元素, 如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作, 不难发现,这里符合递归的原理,所以我们可以用递归来实现。 使用递归,则需要找到递归点和递归出口: 递归点:如果数组的元素大于1,就需要再进行分解,所以我们的递归点就是新构造的数组元素个数大于1 递归出口:我们什么时候不需要再对新数组不进行排序了呢?就是当数组元素个数变成1的时候,所以这就是我们的出口。 理解了原理,来看一下代码实现~ <?php //快速排序 //待排序数组 $arr=array(6,3,8,6,4,2,9,5,1); //函数实现快速排序 function quick_sort($arr) { //判断参数是否是一个数组 if(!is_array($arr)) return false; //递归出口:数组长度为1,直接返回数组 $length=count($arr); if($length<=1) return $arr; //数组元素有多个,则定义两个空数组 $left=$right=array(); //使用for循环进行遍历,把第一个元素当做比较的对象 for($i=1;$i<$length;$i++) { /

左神算法笔记(十)——暴力递归改动态规划扩展

痞子三分冷 提交于 2020-02-10 21:25:15
题目一 暴力递归 暴力递归的复杂度太高,中间存在很多的重复计算,比如0张200,2张100后面的情况跟1张200,0张100后面的情况数目相同,但是暴力递归不考虑这个问题,所以需要进行修改。 public static int coins1 ( int [ ] arr , int aim ) { if ( arr == null || arr . length == 0 || aim < 0 ) { return 0 ; } return process1 ( arr , 0 , aim ) ; } //int[] arr:不变的数组,面值 //index:可以任意自由使用数组中index之后的所有钱 //aim:目标钱数 //返回值:方法数 public static int process1 ( int [ ] arr , int index , int aim ) { int res = 0 ; if ( index == arr . length ) { res = aim == 0 ? 1 : 0 ; } else { //当前面值张数的确立 for ( int zhang = 0 ; arr [ index ] * zhang <= aim ; zhang ++ ) { res += process1 ( arr , index + 1 , aim - arr [