递归算法的教学心得
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递归算法的教学心得
摘要:递归算法的主要作用是把复杂问题分解为简单问题来求解。对于某些复杂问题(例如hanio塔问题),递归算法是一种自然且合乎逻辑的解决问题的方式,但是递归算法的执行效率通常比较差。因此,在求解某些问题时,常采用递归算法来分析问题,用非递归算法来求解问题;另外,有些程序设计语言不支持递归,这就需要把递归算法转换为非递归算法。
关键词:递归;汉诺塔
中图分类号:tp312 文献标识码:a 文章编号:1009-3044(2013)08-1824-02
1 问题提出
在数据结构教学中,常常听到学生说c语言不好学,vc更不好学,而数据结构是最最难学的一门课。其实这几门课并不是什么难得让人无法搞懂的课,只要有好的学习方法和多做实验,就很容易得手。学生们感到数据结构难是因为它的算法思想比较抽象,不好理解。下面以递归算法的教学为例,来谈谈数据结构教学中的一些问题。
2 什么是递归
递归就是函数对于自身的直接或者间接调用,就像是在电视机屏幕里看到自己的影像,在画面里有包含了一台电视机,在那台电视机屏幕里有包含所有眼前看到的画面,当然里面就会又有一个自己和一台更小的电视机。如此循环往复,在更小的一台电视机画面里还会有更小的一幅画面,在理论上这样的循环式没有终止的。这很
像是递归算法的执行过程,但有不同于递归,因为递归算法需要一个终值,就是说它不允许循环无限制地进行下去,要有一个返回的终值。一个函数在其定义中直接或间接调用自身的方法,通常能把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少程序代码量。递归的能力在于用有限的语句来定义对象的无限集合。
所以,在书写递归算法的时候要把好两个关:
第一,递归就是函数或过程对于自身的直接或间接的调用,其标志就是在调用时需要出现函数的名称。也就是说,函数式通过名称来调用自身的;
第二,在递归算法里,必须有一个明确的递归结束条件,也就是递归的出口,或者叫做参数需要一个终值,这个终值是递归开始返回的开关。
递归算法的执行过程会有两个阶段:
第一个阶段是递推,就是把复杂的问题的求解推到比原问题简单一些的问题的过程,其实这个过程可以叫做是递归调用的上段,是函数的调用过程;
第二个阶段叫做回归,也就是当函数调用时的参数遇到了终值时,函数调用结束,函数可以地道一个明确的返回值,然后从这个返回开始,函数层层返回,依次给上一层调用返回一个明确的值,最终复杂的问题会得到一个最终解。
3 教学实例
数据结构到底在学些什么?归纳一下我们学习的内容,其实学到现在我们也就学了几种普通的数据结构,象二叉树,树,图,还有排序的问题,前面的线性表和字符串也就是一些概念,当然还有一个很重要的kmp算法,然后在每种数据结构中我们也就是学到了若干处理的算法,我想真正数起来也就是几十个算法吧。学习数据结构也就是要掌握这几十种算法,多简单。至于如何掌握每个算法呢,我想就是多看看书,重要的是能够理解。
4 结束语
通过这个实例,我们可以看出,递归算法书写简单,代码很少。但是将递归算法非递归化,可以节省存储空间,而且算法的执行效率也有很大的提高。但是,究竟哪种算法更优一些,这要看实际的问题求解过程。某种算法是可行的,但不一定就是最佳的。在一定的问题域里看似最佳的算法,当参数出现变化时,又会出现许多问题。所以,算法教学首要的是教会学生一种思想,不是固定不变的程式。好的思想和灵活的编程技术相结合,是我们算法教学的最终目的。
参考文献:
[1] 严蔚敏,吴伟民.数据结构[m].北京:清华大学出版社,1996.
[2] 李春葆.数据结构析题与解析[m].北京:清华大学出版社,1999.
[3] 蒋建初.高阶拟线性时滞差分方程非振动解的存在性与渐近
性[j].娄底师专学报,2000(4):41-46.
[4] cheng s s, patu w t. an existence theorem for a a nonlinear d ifference equ at ion[j]. non linear ana.l tma20,1993:193- 203.