1。递归的定义:
递归的定义由两部分组成:
1)称作定位点(anchor)或者基本情况(ground case),它们是一些基本元素,这些基本元素是集合序列中其他所有对象的基础。
2)给出除基本元素或者已创建对象之外的新对象的构造规则,可以再三使用这个规则不断产生新的对象。
2。递归的实现:一般是由操作系统完成的,但是大部分的计算机系统的递归定义都是利用运行时堆栈实现的。在系统内,无论何时调用一个方法都会创建一个活动记录。一个递归调用并不仅仅是一个方法调用其自身,而是方法的一个instance调用相同方法的另一个instance,在计算机内部,这些调用是用不同的活动记录表示,并由系统区分。
3。尾递归:
仅在方法的末尾实行一次递归调用,这样的递归叫尾递归。尾递归很容易被循环所替换,或者说它只是一个名字比较好听的循环,如:
void tail(int i){
if(i>0){
System.out.print(i+" ");
tail(i-1);
}
} 替换为循环:
void tail2(int i){
for(;i>0;i--)
System.out.print(i+" ");
} 尾递归对一些没有显式循环结构的语言(如Prolog)特别重要
4。非尾递归:
递归相比于迭代结构的优点就是非常清晰并易于理解,这一点可以在二叉树遍历上得到体现。3种遍历方式的递归版本与迭代版本在可读性上不可同日而语。
问题:逆序输出一行输入(以ruby语言为例)
def reverse
s=STDIN.getc
if s.chr!="/n"
reverse
print s.chr
end
end
reverse 运行此程序,输入一行字符,将逆序输出,本质上是利用运行时堆栈完成的递归调用
5。间接递归:
方法通过一连串的调用,然后间接地调用它自身,这样的递归称为间接递归。
6。嵌套递归
一般出现在函数的定义中,如果这个函数不仅用它自身定义,而且还江它自身作为一个参数,如:
0 n=0
h(n)=n n>4
h(2+h(2n)) n<=4
7。过分递归:递归带来的逻辑简单性和可读性的代价是拖长了运行时间并且相对于非递归方法,它占用了更多的运行时堆栈空间。如果递归层次太深,可能导致运行时堆栈溢出,程序非正常结束的错误。
8。回溯(backtracking技术):在某点有多条道路供选择的时候,但不清楚哪一条能解决问题。在尝试一条道路失败后,返回岔口再试另一条道路。但是必须确定所有的道路都是可尝试的,可返回的。这种技术成为回溯。
在迷宫问题中和8皇后问题中使用此技术。具体程序不再列出(好长@_@)
分享到:
相关推荐
理解递归遍历后,非递归遍历的关键在于使用额外的数据结构(如栈或队列)来跟踪当前的遍历状态。非递归遍历的优势在于它避免了函数调用栈的深度限制,对于非常深的树,递归可能会导致栈溢出。 在实际编程中,根据...
数据结构课程中的递归是一个重要的概念,它在计算机科学中占据着核心地位,尤其是在算法设计和程序编写中。递归是指一个函数或过程在执行过程中直接或间接地调用自身来解决问题的方法。递归通常涉及分治策略,将大...
本实验主题“数据结构实验-递归”旨在通过实际操作帮助学生深入理解这两者之间的关系以及它们在解决特定问题时的应用。 首先,让我们详细讨论全排列。全排列是指从n个不同的元素中取出m(m≤n)个元素,按照一定的...
在这个"java数据结构递归算法"主题中,我们将深入探讨递归的基本概念、如何在Java中使用递归,以及一个著名的递归应用案例——八皇后问题。 递归是函数或方法调用自身的过程。它基于一个问题的规模缩小至基本情况,...
在计算机科学中,数据结构和算法是编程的基础,而递归是解决复杂问题的重要方法之一。递归是一种在函数或程序中调用自身的技术,它通过简化问题来达到求解的目的。递归通常与分治策略相结合,将大问题分解为小的相似...
本项目是用C++语言实现的迷宫游戏,重点在于利用数据结构和递归算法解决路径寻找问题。以下将详细讲解其中涉及的关键知识点。 首先,迷宫生成通常采用随机算法,比如深度优先搜索(DFS)或Prim算法。在这个项目中,...
"C语言数据结构递归算法之迷宫求解"是一个经典的主题,它涉及到程序设计的基本原理,如递归思想和图遍历。 首先,我们要理解什么是递归算法。递归是一种解决问题的方法,它通过调用自身来解决更小规模的问题,直到...
数据结构八皇后问题 eightqueens
非递归遍历二叉树是一种不依赖递归函数来访问树的所有节点的方法,它通常通过栈或队列等数据结构来实现。下面我们将详细探讨非递归遍历二叉树的先序、中序和后序策略。 先序遍历是二叉树遍历的一种方法,其顺序为:...
递归算法在数据结构中是一种常见的算法形式,它通过将问题分解为更小的子问题来解决问题,直至达到一个基本情况(base case)后开始回溯并解决子问题,最终得到原始问题的解。递归算法具有思路明确、代码简洁的优点...
在IT领域,特别是计算机科学和软件工程中,数据结构、递归和算法是核心概念,它们构成了编程的基础。本文将详细探讨这些主题,尤其是递归的运用。 首先,我们要了解什么是数据结构。数据结构是组织和存储数据的方式...
数据结构 递归的定义、递归的调用过程以及各种递归算法的实现。以下三种情况用到递归:定义是递归的、 数据结构是递归的、 问题的解法是递归的
分治是递归程序设计中常用的一种策略,它将一个问题分解为若干个规模较小但结构相同或相似的问题,递归地解决这些子问题后,再将子问题的解合并以得到原问题的解。分治策略的特点是递归地将问题分解,然后合并解决子...
数据结构递归ppt,有助于初学者学习!很有用。
数据结构,递归操作,主要运用栈,队列,链表等结构进行操作
在数据结构教学中,递归算法是一项基础且核心的技能,其重要性不容忽视。递归算法在程序设计中的应用极为广泛,尤其在数据结构领域中,众多的数据结构定义和操作都会涉及到递归概念。因此,理解递归算法对于学生来说...
数据结构实验二叉树用递归实现先序遍历、中序遍历和后序遍历,用几种不同非递归方法实现了中序遍历,代码附有详细注释
本资料“数据结构 二叉树三种遍历的非递归算法(背诵版)”着重介绍了二叉树的三种主要遍历方法——前序遍历、中序遍历和后序遍历的非递归实现。 **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。非...
本主题主要探讨如何利用递归法进行表的查找,这是数据结构中一个非常重要的概念,尤其对于初学者来说,理解并掌握递归查找至关重要。 首先,我们需要了解什么是表。表是一种线性数据结构,它可以存储一系列有序或...