php之递归调用,递归创建目录

/*
递归自身调用自身,每次调用把问题简化,直到问题解决
即:把大的任务拆成相同性质的多个小任务完成
*/
/*
function recsum($n){
	if($n>1){
		return $n + recsum($n-1);
	}else{
		return 1;
	}

}
//递归调用
echo recsum(10).‘<br />‘;
*/

//最先调用,最后返回
//递归:一个函数,自身调用自身,必有终止条件

function sum($n){
	if($n>1){
	echo $n.‘<br />‘;
	return sum($n-1)+$n;//1,3,6,10,15

	} else {
		echo 1 .‘<br />‘;
		return 1;
	}
}

echo sum(5);
/*
分析
sum(1)=1
sum(2)=sum(1)+2;
sum(3)=sum(2)+3
sum(4)=sum(3)+4
sum(5)=sum(4)+5
*/

递归创建目录

<?php
/*
递归创建目录

*/
/*第一种方法
function mk_dir($path) {
	//
	if(is_dir($path)) {
		//
		return true;
	}
	//目录的父目录存在
	if (is_dir(dirname($path))) {
		# code...
		return mkdir($path);
	}
	//父目录不存在,创建父目录
	mk_dir(dirname($path));
	return mkdir($path);
}	

echo mk_dir("d:/a/ac/d/g/d/")?‘ok‘:‘fail‘;
*/

//第二种方法
function mk_dir($path){
	//如果目录已经存在,直接返回
	if (is_dir($path)) {
		# code...
		return true;
	}
	//如果目录不存在,创建
	//父目录不一定存在,
	return is_dir(dirname($path)) || mk_dir(dirname($path))?mkdir($path):false;
}
echo mk_dir(‘./a/n/d/c‘)?‘ok‘:‘fail‘;

?>
时间: 2024-10-13 16:16:15

php之递归调用,递归创建目录的相关文章

方法的创建、重载及递归调用

-----------siwuxie095 1.方法的定义 方法就是一段可重复调用的代码段 定义格式: 「方法的返回值类型为 void 时,不需要返回值,小括号 () 里可以有参数」 2.方法的重载: 方法名称相同,但是参数的类型和个数不同(即参数可辨), 通过传递参数的个数和类型不同来完成不同的功能 调用时系统自动匹配 3.方法的递归调用 递归调用是一种特殊的调用形式,就是方法自己调自己 常用于遍历(如:文件夹等) 如:从 1 加到 100 代码: package com.siwuxie095

python 3 递归调用与二分法

递归调用与二分法 1.递归调用 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身. 示例: def age(n): if n == 1: return 18 # 结束条件 return age(n-1)+2 # 调用函数本身 print(age(5)) 打印结果 26 递归的执行分为两个阶段: 1 递推 2 回溯 示例图 递归特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高,因为每次调用自身时,都会在内存中创建一个新

python-day5-生成器迭代器及递归调用

生成器是一个可迭代的对象,它的执行会记住上一次返回时在函数体中的位置.对生成器第二次(或第 n 次)调用跳转至该函数上次执行位置继续往下执行,而上次调用的所有局部变量都保持不变. 生成器的特点:1.生成器是一个函数,而且函数的参数都会保留.2.迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的.3.函数中yield就是个生成器,多次调用时,根据调用位置依此往下执行,而无法返回 1 #__next__方法会将生成器依此调

子程序的递归调用和重入

递归调用子程序 如果一个子程序直接调用他自己,这种调用称为字节递归调用,如果一个子程序间接调用自己,这种调用称为间接递归调用 递归调用子程序必须采用寄存器或堆栈传递参数,递归的深度受到堆栈空间的限制 下面的子程序递归调用实现求阶乘 ;子程序说明 FACT ;功能,计算N! ;入口参数:(AX) = n ;出口参数:(AX) = n! ;说明采用递归算法实现求阶乘,n不能超过8 FACT PROC PUSH DX MOV DX,AX CMP AX,0 JZ DONE DEC AX 求n-1 CAL

协程函数、递归调用

1.消费者生产者模型初级 2.获取指定目录下子目录与文件 3.递归调用 --消费者生产者模型初级 def eater(name): print('%s start to eat' %name ) while True: food = yield print('%s eat %s' %(name,food)) alex_g = eater('alex')#先获得生成器 next(alex_g)#触发函数使函数暂停到函数的yield alex_g.send('骨头')#给yield发送个值,使yie

函数-递归调用

一.什么是递归调用 递归调用:在函数调用过程中,直接或间接地调用了函数本身,这就是函数的递归调用1.递归的优点 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出.可以试试fact(1000): 2.递归的缺点 解

Python函数中多类型传值和冗余参数及函数的递归调用

1.多类型传值和冗余参数 多类型传值: def fun(x,y): return x +y print fun(3,5) 8 print fun(*t) 3 def fun(x,y,z): return x + y + z t1 = (1,2,3) fun(*t1) 6 fun(*(2,4,5)) 11 fun(1,*t) 4 print t (1, 2) fun(x=1,y=3,z=5) 9 >>> dic = {'x':1,'y':3,'z':6} >>> fun(

在Python函数中如何多类型传值与递归调用

1.多类型传值和冗余参数 多类型传值: def fun(x,y): return x +y print fun(3,5) 8 print fun(*t) 3 def fun(x,y,z): return x + y + z t1 = (1,2,3) fun(*t1) 6 fun(*(2,4,5)) 11 fun(1,*t) 4 print t (1, 2) fun(x=1,y=3,z=5) 9 >>> dic = {'x':1,'y':3,'z':6} >>> fun(

浅谈递归调用的个人领悟

从大一开始学c,就不是挺理解递归的,最近突然有所体会: 递归调用中递归调用的函数可以把它想象成为一个树的结点,在函数中调用自身就是一个分支,直到出口条件时就是这棵树的叶子结点.叶子的值便是出口返回的值.最后从叶子结点按照你所调用的方法向上返回值,最终结束递归调用.