全局变量和递归

区别:

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.全局变量是一个完整的变量,可以连续记忆;局部变量不可以记忆;

递归:

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

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

参考实例:计算磁盘文件数量

//实例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");
时间: 2024-11-09 06:42:56

全局变量和递归的相关文章

Python基础局部变量、全局变量,递归的特性——07

局部变量与全局变量 如果函数的内容无global关键字,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值,但是对于可变类型,可以对内部元素进行操作. 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值. 递归 特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高,递归层次过多会导致栈溢出 例: def calc(n): if int(n/2) == 0: return n return (int(n/

全局变量 局部变量 递归

#!/user/bin/env python# -*- coding:utf-8 -*-# 1.局部变量,全局变量,没有缩进的变量就是全局变量.有缩进的被成为局部变量,子程序里的变量为局部变量.全局变量尽量遵循用大写表示,局部# 变量我们尽量用小写来定义.例:# name ="张三" #这里定义的为全局变量# def ce():# name="测试" #这个就是局部变量.# print(name)# print(name)# ce()# 2.global在子程序里引

递归简介

Big Recursive Idea <像程序员一样思考> 第六章 1. 递归基础知识 当一个函数在任意时候调用自身就发生了递归调用,因此递归语法就是函数调用的语法.递归函数包括 基本情况 和 递归调用 两个部分.递归要求我们对问题进行细分,把原问题的一个消减版本传递给递归调用,然后通过基本情况结束递归. \[ 递归函数 \begin {cases} 基本情况, \space 不需要递归就能返回值 \递归调用 \end{cases} \] 当你考虑使用递归来解决问题时, 首先思考 基本情况 是

Python基础学习(四)

Python 集合: set 顾明思义,就是个集合,集合的元素是唯一的,无序的.一个{ }里面放一些元素就构成了一个集合,set里面可以是多种数据类型(但不能是列表,集合,字典,可以是元组) 它可以对列表里面的重复元素进行去重 list1 = [1,2,3,23,1,4,2] list1 = set(list1) 集合的关系测试: a = {1,2,3,4,5} b = {1,3,5,7,9} a.symmetric_difference(b) #对称差集 a.difference(b) #差集

lintcode 中等题:N Queens II N皇后问题 II

题目: N皇后问题 II 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局. 样例 比如n=4,存在2种解决方案 解题: 和上一题差不多,这里只是求数量,这个题目定义全局变量,递归的时候才能保存结果,参考程序 java程序: class Solution { /** * Calculate the total number of distinct N-Queen solutions. * @param n: The number of queens. * @return:

ACM 组合数

组合数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r<=n)个数的所有组合. 输入 输入n.r. 输出 按特定顺序输出所有组合.特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列. 样例输入 5 3 样例输出 543 542 541 532 531 521 432 431 421 321 关键点1.画出递归树,理清每次递归或每到一个节点时的判断条件2.需要有两个全局变量记录

Java 中实现方法重试的一种机制

有这样一个需求,当调用某个方法抛出异常,比如通过 HttpClient 调用远程接口时由于网络原因报 TimeOut 异常:或者所请求的接口返回类似于"处理中"这样的信息,需要重复去查结果时,我们希望当前方法能够在这种特定的情况下,重复执行,如果达到了我们的期望,则不重复执行.而且,我们希望能够控制重试次数,不希望无限期执行下去. Java 中有各种定时任务的实现,如 Spring 的 Schedule,Quartz 等,稍微想一下,显然不符合我们的需求.递归倒是可以,但是有些问题,先

动态点分治学习笔记

学习动态点分治之前要先弄清楚点分治的原理,二者的应用范围的不同就在于动态的支持在线修改操作,而实现的不同就在于动态点分治要建点分树. OI中有很多树上统计问题,这类问题往往都有一个比较容易实现的暴力做法,而用高级数据结构维护信息有显得过于复杂,有没有一种"优美的暴力",能既保证思维的简单性,又有更高效的时间复杂度保证呢?这就是点分治的思想. 点分治的实现过程是:每次找到当前树的重心,然后以这个重心为根统计这个树的信息,然后对重心的每个孩子分别递归,同样用将重心作为根的方法统计子树的信息

java-retry实现

有这样一个需求,当调用某个方法抛出异常,比如通过 HttpClient 调用远程接口时由于网络原因报 TimeOut 异常:或者所请求的接口返回类似于“处理中”这样的信息,需要重复去查结果时,我们希望当前方法能够在这种特定的情况下,重复执行,如果达到了我们的期望,则不重复执行.而且,我们希望能够控制重试次数,不希望无限期执行下去. Java 中有各种定时任务的实现,如 Spring 的 Schedule,Quartz 等,稍微想一下,显然不符合我们的需求.递归倒是可以,但是有些问题,先看下递归的