2. int BinTreeDepth(BitTree T)
{
if(T==NULL)return0;
else{
u=BinTreeDepth(T->lchild);
v=BinTreeDepth(T->rchild);
return((u>v?u:v)+1);
}
}
关于递归,你可以看成是一句一句往下运行嘛。需要保存状态的时候,系统就会自动用栈帮你保存。就依你说得那个为例:
n为全局变量,初值为0;
第一次调用
BinTreeDepth(BitTree T),假设T!=NULL
由于T!=NULL:跳过if (T==NULL) return 0; 关键到了
BinTreeDepth(BitTree T); 调用本身的函数:此时的T->lchild保存在栈中,既然是调用就得从函数开头执行:
看下这时候T2(其实就是T->lchild),if (T==NULL) return 0;这里假设T不是NULL,就继续运行在遇到u=BinTreeDepth(BitTree T); 在调这个函数本身——
这里就假设它为T->lchild==NULL吧。这下可好,这个函数执行return 0;慢着:第二次函数调用u=BinTreeDepth(BitTree T)中的函数值已经计算出来啦。这时u=0;你还记得第二次调用运行到了v=height(T->rchild); 这句话吧?好,这个过程就和u=height(T->lchild)完全一样。这里也假设得到的v=0则第二次调用到了
return((u>v?u:v)+1);
得到一个返回值,不如就假设u〉n,于是返回值1;好,这一波完毕;你还记得第一次调用的BinTreeDepth(BitTree T)吧,这时把返回值给u,u=1;然后执行到第一次调用中的v=BinTreeDepth(BitTree T); 了。分析同上。
分享到:
相关推荐
根据给定的信息,本文将详细解释C#中的递归概念,并通过具体的代码示例来解析递归函数在构建树形结构中的应用。 ### C#递归基础 #### 什么是递归? 递归是一种编程技术,它允许一个方法或函数直接或间接地调用自身...
阿克曼函数是一种非常特殊的数学函数,常用于理论计算和计算机科学中,特别是在讨论递归算法和计算复杂性时。这个函数是由荷兰数学家格奥尔格·阿克曼在20世纪早期提出的,它展示了超越函数的概念,即无法用初等函数...
在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...
### 可并行递归算法的递归多线程实现:深入解析 #### 引言:多线程与并行处理的重要性 随着计算任务日益复杂,传统的单线程编程模型已无法满足高效处理大规模数据的需求。多线程编程作为一种提高程序并发性和性能...
递归算法与非递归转化 递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。递归的效率一般不高,但是递归比较符合人类的思维方式。一般而言非递归算法更有效;但很多...
### ABAP简单递归算法解析 #### 一、引言 ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言。它不仅支持传统的过程化编程,还支持面向对象编程和Web开发。本文将深入探讨一个ABAP中...
空间复杂度方面,非递归实现主要取决于分区操作和栈的使用,而递归实现则依赖于递归深度,一般情况下都是O(log n)。 在实际编程中,可以根据具体需求选择非递归或递归实现。非递归版本更适合内存有限或者递归深度...
在ACM(国际大学生程序设计竞赛)中,递归算法是一种常见的解决问题的方法,它通过函数自身调用自身来实现问题的解决。递归的核心在于找到基本情况(base case),即可以直接求解的问题,以及每次递归调用时问题规模...
在本主题中,我们将深入探讨二叉树的三种主要遍历方法:中序遍历、前序遍历和后序遍历,以及如何通过递归和非递归的方式实现这些遍历。 首先,让我们理解递归遍历的概念。递归是一种解决问题的方法,它将问题分解为...
在IT领域,递归是一种强大的编程技术,常用于解决复杂问题。递归图和递归分析是理解递归过程和优化算法效率的重要工具。本文将深入探讨这些概念,并结合MATLAB环境,阐述如何利用它们进行复杂的系统分析。 首先,...
在编程领域,递归是一种强大的思想,它基于解决问题的子问题与原问题具有相同结构的特点。递归函数是实现递归思想的一种方式,通常在函数内部调用自身来解决复杂问题。本节将深入探讨递归思想和递归函数的概念,并...
阿克曼函数是一种非常特殊的数学函数,它在计算理论和计算机科学中被广泛用来探讨递归的概念。这个函数因其复杂的性质而闻名,特别是在其参数达到一定值时,增长速度极其迅速,以至于很快超出任何可计算的范围。在这...
在时间序列分析领域,递归图(Recurrence Plots,简称RP)是一种强大的可视化工具,用于揭示时间序列的内在结构和动态行为。递归图通过将时间序列转换为二维图形,帮助研究人员直观地理解系统的复杂性和周期性。本文...
本主题聚焦于熵的递归图分析,这是一种利用递归图来提取一维信号特征的方法,广泛应用于信号的分类、识别和特征提取。 首先,我们要理解“熵”的基本概念。熵在信息论中定义为一个随机变量的不确定性,通常用数学...
递归算法是编程中一种强大的工具,它通过调用自身来解决问题或简化复杂的问题。然而,在某些场景下,非递归算法可能更有利于性能优化或理解。本章将探讨如何将递归算法转换为非递归算法。 首先,我们要了解递归的...
在编译原理中,消除文法的左递归是一个重要的概念,主要应用于解析器的构造。这个过程是为了使解析过程更加高效,避免无限循环的发生。本文将深入探讨左递归的定义、为何需要消除以及如何消除,同时结合课程设计与...
递归遍历的优点在于其代码简洁明了,但缺点是当处理大规模的二叉树时,递归可能会导致栈溢出,因为每次递归调用都会增加栈的深度。 **非递归遍历** 1. **前序遍历**: - 使用一个栈来保存待访问的节点。 - 将根...
递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...
C++递归程序的概念及其执行过程 递归是计算机科学中的一个核心概念,它是一种解决复杂问题的方法,通过将大问题分解为规模更小、更容易解决的小问题来实现。在程序设计中,递归允许程序调用自身来处理这些分解后的...