全局变量和递归

区别:

1.放于函数外面的,放于循环外面的变量为全局变量,放于里面的为局部变量;

2.定义全局变量后,在函数外部可以取到该变量

3.看下面代码

$a=10;
show();
function show()
{
    $a=1;
    global $a;
    $a=100;
    echo $a;
    }
//输出 100
$a=10;
show();
function show()
{
    $a=1;
    global $a;
    echo $a;
    }
//输出 10

4.全局变量是一个完整的变量,可以连续记忆;局部变量不可以记忆;

5.js中定义全局变量,如下

声明方式一:使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。

var test = 5;  //全局变量
function a()
{
  var cc=3; //局部变量
  alert(test);
}
function b(){alert(test);}

声明方式二:没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。如果该语句放于一个function内,只有该function被调用后test才能变成全局变量,所以最好放于function外;

test = 5;//全局变量 
function a()
{
  aa=3; //全局变量但是在a()被调用之后
  alert(test);
}

声明方式三:使用window.变量名定义为全局变量

window.test;
window.test = 5

5.php中声明全局变量使用global;

6.在函数中,局部变量要想在外层输出必须要求函数有返回值并且被接收或输出函数。全局变量可直接输出。

递归:

就是做梦,一层一层进入,一层一层退出,每次出来的时候,下一层和上一层之间的结果如果不是全局变量,无联系。循环遍历出所有的可能;

特点:代码简单,不易理解,计算机消耗资源大,运算效率低;

参考实例:磁盘文件数量

//方法1:使用全局变量
//定义两个变量
$filenum=0;
$dirnum=0;

Num("../file");

function Num($url)
{
    //声明为全局变量
    global $filenum;
    global $dirnum;
    //判断给的路径是不是文件m
    if(is_file($url))
    {
        $filenum=1;
        return $filenum;
        exit();    
        }
    //如果是目录,计算文件、文件夹数量
    //获取到该目录下的子文件
    $attr=glob($url."/*");
    //遍历所有的子文件
    foreach($attr as $v)
    {
        //判断子文件是文件?
        if(is_file($v))
        {
            $filenum++;
            }
        else
        {
            $dirnum++;
            Num($v);//递归,自己调用自己
            }
        }    
}
echo "文件的数量:".$filenum."<br/>";
echo "文件夹的数量:".$dirnum;
//方法2:不使用全局变量获取某路径下文件的数量
function Num($url)
{
    $filenum=0;
    if(is_file($url))
    {
        $filenum++;
        exit;
        }
    $attr=glob($url."/*");
    var_dump($attr);
    foreach($attr as $v)
    {
        if(is_file($v))
        {
            $filenum++;
            }
        else
        {
       //Num($v);//每一层的$filenum无联系
$file=$filenum+Num($v); } } return $filenum; } echo Num("../ajax");
原文地址:https://www.cnblogs.com/jinshui/p/5638920.html