`

递归调用中使用全局变量和函数参数之间的差异

阅读更多
对树、图进行 遍历时,包括 前序、中序、后序、深度搜索、广度搜索

存在一些参数,可以用
    1.  全局变量表示,递归结束后必须对该变量修改,恢复原值
    2.  普通函数参数,因为递归调用函数时,实际上,从内存分布上看,每一层调用都保存了该层函数的参数,因此递归返回上层时,不会影响原参数值


1.   全局变量表示
int currentSum = 0;
vector<Node *> path;
void traverse(Node *root, int expectedNum) {
        currentSum += root->value;
	path.push_back(root);
	
	if(root->left == NULL && root->right == NULL) {
		if(currentSum == expectedNum) {
			show(path);
			cout << currentSum <<endl;
		}
	}

	if(root->left != NULL)
		traverse(root->left, expectedNum);
	if(root->right != NULL)
		traverse(root->right, expectedNum);

	[color=red]currentSum -= root->value;   // 必须恢复,所有函数调用使用同一个值
	path.pop_back();[/color]
}


2. 普通函数参数
void traverse(Node *root, int currentSum, vector<Node *> path, int expectedNum) {
        currentSum += root->value;
	path.push_back(root);
	
	if(root->left == NULL && root->right == NULL) {
		if(currentSum == expectedNum) {
			show(path);
			cout << currentSum <<endl;
		}
	}

	if(root->left != NULL)
		traverse(root->left, currentSum, path, expectedNum);
	if(root->right != NULL)
		traverse(root->right, currentSum, path, expectedNum);

        // 不必恢复  currentSum, path,各函数调用层独立使用
}

分享到:
评论

相关推荐

    JavaScript程序设计教学设计:函数的嵌套和递归.docx

    特点:内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引入某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域,我们称这种链式的查询关系为作用...

    python函数局部变量、全局变量、递归知识点总结

    函数局部变量 全局变量 及其作用域 #简单类型(int str等)变量的局部变量与全局变量及其作用域的关系 name = xxx #第一级顶头定义的变量都称为全局变量,其作用域从变量定义的位置开始到此程序结束 def Print_Name...

    C语言全书word版CHAR08

    8.6 函数的递归调用 10 8.7 数组作为函数参数 12 8.8 局部变量和全局变量 17 8.8.1 局部变量 17 8.8.2 全局变量 19 8.9 变量的存储类别 20 8.9.1 动态存储方式与静态动态存储方式 20 8.9.2 auto变量 21 8.9.3 用...

    Python程序基础:函数综合案例.pptx

    Python支持函数的递归调用,所谓递归就是函数直接或间接地调用其本身。;;所谓局部变量,指的是定义在函数内的变量,只能在函数内使用,它与函数外具有相同名称的其他变量没有任何关系。不同函数中,可以使用相同名字...

    三、第一阶段-Python函数

    文章目录写在前面1....全局变量7.1 全局变量简介7.2 全局变量和局部变量名字相同的问题7.3 修改全局变量 写在前面 本篇重点 函数的创建 函数的调用 函数的参数传递 1.函数简介 为什么需要函数:程序开发时,某些代

    C语言程序设计标准教程

    函数的参数和函数的值 一、函数的参数  前面已经介绍过,函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、实参的特点和两者的关系。 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则...

    用函数实现模块化程序设计

    7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型 ...7.7数组作为函数参数 7.8局部变量和全局变量 7.9变量的存储方式和生存期 7.10 关于变量的声明和定义 7.11 内部函数和外部函数

    实验 10 函数理解函数和局部变量的概念

    (4) 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 二、实验内容和步骤 I.基础部分:理解函数和局部变量的概念 (1)给定程序 c10-1-1.c 的功能是:交换变量 m 和 n 的值。运行调试 c10-1-1.c,观察...

    第十二天学Python:函数(3)变量作用域、匿名函数与递归函数

    变量作用域全局变量与局部变量global:关键字nonlocal:关键字匿名函数 lambda递归函数递归函数的原理填个以前的小坑:逻辑短路 变量作用域 全局变量与局部变量 全局变量:全局变量在整个程序文件(.py)中声明,...

    C语言函数部分课件(较详细)

    函数定义的一般形式 8.2 函数参数和函数的值 8.3 函数的调用 8.4 函数的嵌套调用 8.5 函数的递归调用 8.6 数组作为函数参数 8.7 局部变量和全局变量

    04-Python函数

    Python函数思维导图,便捷整理思路,函数介绍、函数的定义与调用、函数参数、函数返回值、、局部变量和全局变量、递归函数、匿名函数

    shell浅谈之十函数.docx

    Linux Shell编程中也会使用到函数,函数可以把大的命令集合分解成若干较小的任务,也避免重复编写相同...函数又涉及到很多基本使用:函数参数调用、函数返回值、局部变量及全局变量、函数间的相互调用和函数递归调用。

    计算机软件工程练习.doc

    函数的嵌套调用和递归调用;数组作为函数参数;局部变量和全局变量;变 量的存储类别(自动,静态,寄存器,外部);变量的作用域和生存期。 5.编译预处理命令:不带参宏定义和带参宏定义的使用;"文件包含"的处理...

    C++中的函数(2013级-C++程序设计)

    4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数 *4.6 函数的重载 *4.7 函数模板 *4.8 有默认参数的函数 4.9 函数的嵌套调用 4.10 函数的递归调用 4.11 局部变量和全局变量 4.12 变量的存储类别 4.13 变量...

    函数基础讲解(C语言)

    详细地讲解了函数这一章的内容,包括: 1函数概述 2 函数的定义 3 函数参数及返回值 4 函数的调用 5 函数的嵌套调用 6 函数的递归调用 7 局部变量和全局变量 PPT课件。

    C语言程序设计第五章函数

    掌握函数的定义与调用方法,理解递归调用的特点 掌握函数参数的设置,熟悉实参与形参之间的传递方式 理解全局变量与局部变量的特点 能根据要求完成函数的定义,掌握函数实参和形参的使用 能根据函数的结构与功能正确...

    JS匿名函数、闭包

    在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域和全局作用域; 通常,函数的作用域及其所有变量都会在函数执行结束后被销毁; 但是,当函数返回了一个闭包时,这个函数的作用域将会...

    C语言编程 C语言程序设计 C语言入门教程 第7章 用函数实现模块化程序设计 共211页.ppt

    7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 ...7.6函数的递归调用 7.7数组作为函数参数 7.8局部变量和全局变量 7.9变量的存储方式和生存期 7.10 关于变量的声明和定义 7.11 内部函数和外部函数

    javaScript函数式编程

    全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...

    计算机语言中c/c++的基础入门学习代码记录(适应于计算机二级)

    08局部变量和全局变量) 7.编译预处理(01无参数;02有参数;03文件包含处理) 8.指针(01sizeof运算符;02指针的定义和使用;03指针间接接触赋值;04指针作为函数参数;05数组名作为函数参数;06函数返回值为指针...

Global site tag (gtag.js) - Google Analytics