`

递归函数

阅读更多

今天在网上看了一个将二叉树转换成是双向链表的题目,发现自己对递归还是没有一个很精准的把握,看下面代码:

 

 

void helper(BSTreeNode *& head, BSTreeNode *& tail, BSTreeNode *root) {
BSTreeNode *lt, *rh;
if (root == NULL) {
head = NULL, tail = NULL;
return;
}
helper(head, lt, root->m_pLeft);
helper(rh, tail, root->m_pRight);
if (lt!=NULL) {
lt->m_pRight = root;
root->m_pLeft = lt;
} else {
head = root;
}i
f (rh!=NULL) {
root->m_pRight=rh;
rh->m_pLeft = root;
} else {
tail = root;
}
}

 

 我自己总结了递归函数必须要考虑的三个问题:

1.递归函数的终止条件,终止条件怎么写

我一开始误以为上面的递归函数helper没有终止,我以为要加上if(root->left!=NULL)才要调用helper(head,it,root->left);刚开始还有点窃喜,但后来我觉得终止递归有两个方法一个就是在调用前判断(就是在上一个递归层判断)是否要调用,还有一个是在自己函数内部判断(如果不符合要求,则返回就不在调用递归)。然后我发现if(root==NULL)就是我认为的第二个方法。虽然第一种方法思路上比较容易接受,但是程序本身就显得不够干净有冗余,而第二种则对传入的参数统一判断,程序上更加简洁。

2.执行语句及语句执行的时机

执行语句当然是指除了递归的语句(还包括终止条件),首先是对参数的判断,针对不同情况进行不同的处理,然后就是执行时机——有递归前,递归中,递归后,三种情况,都针对不同的情形,最好的案例就是二叉树的先序,中序,后序遍历过程。

3.参数的传递

每一个参数的意义,还有考虑上下两层递归的参数意义发生的变化,当然还有参数关系的衔接。

其实递归函数就是一棵树的结构,最下面一个递归的结果是head=root。

 

0
0
分享到:
评论

相关推荐

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算...

    Oracle 递归函数介绍

    Oracle 递归函数介绍 Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法...

    5.6 递归思想和递归函数1

    递归函数是实现递归思想的一种方式,通常在函数内部调用自身来解决复杂问题。本节将深入探讨递归思想和递归函数的概念,并通过几个具体的Python示例来阐述其工作原理和应用。 首先,理解递归的关键在于明确两个核心...

    Python语言基础:递归函数.pptx

    在编程领域,递归函数是一种基于函数自我调用来解决问题的策略。在Python中,递归函数的定义简单,逻辑清晰,使得复杂问题的解决变得直观。递归函数的关键在于每个递归调用都必须向基本情况靠近,即最终会达到一个不...

    递归函数例子8个.rar

    在编程领域,递归函数是一种基于自我调用的函数设计技术,它在处理特定问题时,尤其是涉及到数据结构如树和图的操作时,显得尤为重要。本压缩包包含8个递归函数的例子,覆盖了多种递归应用,让我们逐一探讨这些递归...

    数据结构:栈的应用-递归函数转非递归函数

    总结一下,通过使用数据结构中的栈,我们可以将效率较低的递归函数转换为非递归函数,提高计算效率,减少内存消耗,防止堆栈溢出。在实际编程中,尤其是在处理大数据量或需要高效运行的算法时,这样的优化是非常重要...

    递归函数示意图.pdf

    递归函数是计算机科学中的一种基础概念,它的基本思想是函数直接或间接地调用自身。在上述内容中,首先展示了一个简单递归函数的示例,然后又通过添加辅助函数进行了尾递归优化。 在简单递归函数的示例中,定义了一...

    嵌入式C语言培训-C编程基础-递归函数视频教程

    本教程“嵌入式C语言培训-C编程基础-递归函数视频教程”聚焦于C语言的一个关键特性——递归函数。递归是编程中的一个强大工具,能够简化复杂问题的解决方案,但它也需要程序员有深入的理解才能正确使用。 递归函数...

    计算递归函数调用次数

    在编程领域,递归函数是一种强大的工具,它通过自身调用来解决复杂问题。递归的基本原理是将大问题分解为相同或相似的小问题,并通过解决这些小问题来达到解决整个问题的目的。本主题关注的是如何计算递归函数的调用...

    delphi递归函数应用

    Delphi,作为一款流行的Object Pascal编程环境,同样支持递归函数的使用。本篇文章将详细探讨Delphi中的递归函数及其应用。 首先,我们要理解递归的基本概念。递归是指一个函数或过程通过调用自身来完成任务。这种...

    利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    c++递归函数基本代码.zip

    在“c++递归函数基本代码.zip”压缩包中,可能包含了若干个示例,用于展示如何在C++中实现递归。 首先,理解递归的基本原理至关重要。递归函数必须满足两个条件:一是存在基本情况(base case),即问题可以直接...

    省市县递归函数

    省市县递归函数

    递归函数两个例子教程(VB6.0代码编写)

    在编程领域,递归函数是一种强大的工具,它通过调用自身来解决问题或执行任务。VB6.0(Visual Basic 6.0)虽然是一款较老的编程环境,但仍然广泛用于教学和某些遗留系统的维护。本教程将通过两个具体的例子深入讲解...

    第2章 原始递归函数

    由原始递归函数经过合成或原始递归得到的函数仍是原始递归函数.

    递归函数演示

    二是理解和调试递归函数可能较为困难,因为它们涉及的逻辑通常比非递归函数更为抽象。因此,在实际编程中,我们需要权衡递归的优点和缺点,选择最适合问题的解决方案。 总结来说,递归是计算机科学中的一个重要概念...

    Python中递归函数的使用示例

    使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。 使用步骤: ...目的:帮助理解递归函数在Python中的具体使用。

    使用递归函数在矩阵中寻找路径

    在这个场景中,我们采用了一种称为“回溯法”的策略,配合递归函数来找到从起点到终点的有效路径。本文将深入探讨回溯法的概念,递归函数的应用,以及如何将两者结合解决迷宫问题。 首先,理解回溯法是关键。回溯法...

    C语言递归函数设计

    C语言递归函数设计,如何使用递归函数进行算法计算,这样可以提高程序的质量

    Python 递归函数详解及实例

    Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要...

Global site tag (gtag.js) - Google Analytics