`

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

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

存在一些参数,可以用
    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,各函数调用层独立使用
}

分享到:
评论

相关推荐

    408函数-递归调用-全局变量和局部变量

    ### 408函数-递归调用-全局变量和局部变量 #### 一、CLion环境下新建文件及函数管理 在CLion环境下新建文件,尤其是C/C++源文件,对于项目的组织和代码的管理非常关键。为了提高编程效率和调试效果,我们需要遵循...

    C语言函数的嵌套调用和递归调用PPT课件.pptx

    C语言函数的嵌套调用和递归调用 本文主要介绍C语言函数的嵌套调用和递归调用,包括函数的递归调用、变量的作用域和存储类型等知识点。 函数的递归调用 函数的递归调用是指函数直接或间接地自我调用的一种调用方式...

    计算递归函数调用次数

    在这个例子中,每次递归调用都会增加全局变量`count`的值,从而追踪调用次数。当计算Succ(n)时,最后会返回函数的计算结果以及`count`的值,显示递归调用的次数。 计算递归函数调用次数有助于分析算法的时间复杂度...

    递归调用详解,分析递归调用的详细过程[参考].pdf

    程序员还必须确保递归函数不会随意改变静态变量和全局变量的值,以避免在递归下降过程中的上层函数出错。 递归调用可以解决许多问题,如求和、阶乘、斐波那契数列等。例如,求 1+2+⋯ ⋯ +100 的和,可以使用递归...

    c语言中全局变量和局部变量的探讨

    然而,对于初学者来说,掌握C语言的一些核心概念仍然存在一定的难度,尤其是在处理函数的递归调用、局部变量与全局变量的区别以及指针的使用等方面。本文旨在深入探讨C语言中的局部变量和全局变量,通过具体的例子和...

    C语言函数的嵌套调用和递归调用PPT学习教案.pptx

    C语言函数的嵌套调用和递归调用 本学习教案主要介绍了C语言函数的嵌套调用和递归调用,包括函数的递归调用概念、变量的作用域和存储类型等知识点。 一、函数的递归调用 递归函数是指函数直接或间接地自我调用的...

    C语言程序设计No-第八章函数完美版资料.ppt

    通过本资源摘要信息,读者可以了解C语言程序设计中函数的概念和应用,并且可以更好地理解函数的定义、参数、调用、嵌套调用、递归调用、数组作为函数参数、局部变量和全局变量、变量的存储类别、内部函数和外部函数...

    C语言函数与编译预处理

    本实验报告主要涉及C语言的函数和编译预处理,旨在帮助初学者掌握函数定义、函数调用、全局变量和局部变量、动态变量、静态变量的概念和使用方法,以及多文件程序的编译和运行。 一、函数定义和调用 函数是C语言中...

    Python实验四 掌握函数的方法和递归调用.docx

    通过以上实验,你可以深入理解 Python 中函数的定义、使用、参数传递和变量作用域,以及递归调用的概念。同时,你还将学会如何利用随机数进行模拟运算,这在数据分析和游戏开发等领域都有广泛的应用。

    (C++课件)第4章__函数定义与调用(函数1)

    4.7 函数的递归调用 函数可以调用自身,这就是递归。但必须确保存在递归基,即最终能终止递归的情况,否则会导致无限递归。 4.8 编译预处理 预处理器在编译阶段处理`#include`、`#define`等指令,完成文本替换和...

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

    通过上述讲解,我们已经了解了它们在作用域链中的查找机制,递归调用的逻辑流程,以及如何使用递归来实现斐波那契数列。这些知识不仅适用于JavaScript,也是通用的编程原理,值得深入学习和实践。

    Python二级等级考试电子教案 第5章 函数和代码复用.pdf

    首先,函数的定义是使用关键字def开始的,后跟函数名和圆括号内的参数列表,参数之间以逗号分隔,如果没有参数则括号内为空。函数体由冒号开始,后跟缩进的多条语句。例如,一个计算阶乘的函数可以这样定义: ```...

    实验七函数.docx

    在本实验中,我们使用了全局变量和局部变量来实现不同的功能。 五、数组和矩阵 数组是指一组相同类型的变量的集合。在C语言中,数组可以是一维或多维的。在本实验中,我们使用了一维数组和二维数组来实现不同的...

    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 用...

    C语言用函数实现模块化程序设计公开课获奖课件.pptx

    通过本课程,学生将学习如何使用函数实现模块化程序设计,如何定义和调用函数,函数的嵌套调用和递归调用,函数参数和返回值,局部变量和全局变量,变量的生存期和寄存方式等重要概念。 第7.1章节中,课程首先介绍...

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

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

    11.6.01-第06章-函数.pptx

    函数的嵌套调用是指在一个函数中调用另一个函数,而递归函数是指函数调用自身的函数。匿名函数是指没有函数名的函数。 Python 中的函数可以分为四种类型:无参数,无返回值的函数;无参数,有返回值的函数;有参数...

    FORTRAN函数调用

    在编程领域,函数调用是程序设计中一个关键的概念,它允许我们把一系列相关的操作封装成独立的功能单元,便于重复使用和模块化编程。在这个FORTRAN程序中,我们看到一个内部函数`ifac`被用来计算阶乘(n!),也就是...

    任务三 函数与预处理命令.pdf

    本文档是关于函数和预处理命令的知识点总结,涵盖函数的定义、调用、数组作为函数参数、函数的嵌套调用和递归调用、局部变量和全局变量的作用域、变量的存储类别和生存期、函数的存储分类、编译预处理等多个方面的...

    C_C++程序设计 第五章 模块化程序设计.ppt

    本章节总的来说讲述了 C 语言程序设计中的模块化程序设计,包括函数的概念、函数的定义和调用、函数参数和返回值、函数的嵌套调用和递归调用、局部变量和全局变量、动态存储变量与静态存储变量、内部函数和外部函数...

Global site tag (gtag.js) - Google Analytics