递递递递递归归归归归

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====
关于日志log class的答疑

昨天发现的一个现象:
我们循环5000次,写入curr.log文件,
事实上呢,大约3000次的,已经超过1M了,
但是,还是持续的写入到curr.log里.

必须下次刷新,才会备份,重新建一个curr.log

 

PHP.exe开启进程 PID 111 start
5000次读取
php.exe结束进程 PID 111 end;


PHP.exe开启进程 PID 112 start
5000次读取
php.exe结束进程 PID 112 end


PHP.exe开启进程
5000次读取
php.exe结束进程


在1次进程中, filesize的结果会被缓存(很多文件信息获取函数的结果都会被缓存,如filemtime)
因此第1次运行时,读到的size全是0(即使这个过程中文件的内容已经被修改了)

当我们再次刷新时: filesize > 1M,
curr.log --raname--> 11202345.bak
新建curr.log filesize-->0 KB

在论坛上的问题出现在哪儿呢?
答:即便curr.log->rename->11202345.bak了,
但,filesize还是缓存了,

因此,循环的5000次中,始终认为curr.log>1M,
始终备份.....
***/


for($file='./a.txt',$i=0;$i<100;$i++) {
echo filesize($file),'<br />';
$fh = fopen($file,'ab');
fwrite($fh,$i."\r\n");
fclose($fh);
}

echo 'OK';

 

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====

递归
1: 不求理解,先会写

2: 再去理解
***/


/*
题目:
写一个sum($n)
求1->N的和
*/

/*
function sum($n) {
for($sum=0,$i=1;$i<=$n;$i++) {
$sum += $i;
}

return $sum;
}

echo sum(100),'<br />';
*/

/*
function sum($n) {
return array_sum((range(1,$n)));
}

echo sum(100),'<br />';
*/

 

/***
老师让我计算1到100的和,我不会.
但是我偏我会. [无赖法写递归函数]

问: sum(100) == ?
答: sum(99) + 100;

问: sum(99) == ?
答: sum(98) + 99;

....
....


问: sum(2) == ?
答: sum(1) + 2;


问:sum(1) == ?
答: 真会,!


sum(100)->

sum(99) + 100
sum(98) + 99 + 100;
sum(97) +98 +99 +100;
...
...
...
sum(1) + 2 + 3....+ 100;

= 1 + 2 + 3 .... + 100;
***/

 

function sum($n) {
if($n>1) {
return sum($n-1) + $n;
} else {
return 1;
}
}

 

echo sum(100);

 


/*
用无赖法打印出级联目录来?
*/

 

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====
用耍赖法打印级联目录
***/


/*
谁会 递归打印级联目录?

思考:我不会打印级联目录,但是,我会打印一层目录,(这个单子可以接)
答:我会 recdir
*/


function recdir($path) {
$dh = opendir($path);

while(($row = readdir($dh)) !== false) {
if($row == '.' || $row == '..') {
continue;
}

echo $row,'<br />';

// 如果$row还是目录 怎么办?
if(is_dir($path . '/' .$row)) {
recdir($path . '/' .$row);
}
}

closedir($dh);

}


recdir('./');

 

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====
要想理解递归,你必须理解电影中的"慢动作".
要把函数的运行过程理解的非常慢
***/


/*
函数 调用 开始 执行
碰到 return 或 执行到最后结束
*/


function sum($n) {
if($n>1) {
$tmp = sum($n-1) + $n;
echo $n,'<br />';
return $tmp;
} else {
echo 1,'<br />';
return 1;
}
}

echo sum(5);

 

 

<?php
/****
燕十八 公益PHP讲堂

论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====
写个函数模仿tree命令
***/

/*
├─

*/

function recdir($path,$lev=1) {
$dh = opendir($path);

while(($row = readdir($dh)) !== false) {
if($row == '.' || $row == '..') {
continue;
}

echo '├',str_repeat('─',$lev),$row,'<br />';

// 如果$row还是目录 怎么办?
if(is_dir($path . '/' .$row)) {
recdir($path . '/' .$row,$lev+1);
}
}

closedir($dh);

}


recdir('./',1);

 

/***
作业:
级联创建目录
按日期创建目录

 

array(

1=>array('安徽',0),
2=>array('北京',0),
3=>array('淮北',1),
4=>array('濉溪县',3)
)

array('淮北',1)
其中 淮北是地名, 1是其父地区.

利用递归,把地区的上下级关系 层次的打印出来!!!!

----无限级分类

***/

 

 

posted on 2012-11-26 17:21  besile  阅读(271)  评论(0)    收藏  举报