当前位置:文档之家› 探讨递归方法及其计算机实现

探讨递归方法及其计算机实现

探讨递归方法及其计算机实现
摘要:随着计算机技术的快速发展,数学知识在计算机技术发展中,尤其是在计算机应用程序设计中处于极其重要的地位.同时,用数学的思维解决各种程序设计方面的难题也是十分重要的.从方法论意义上说,递归方法是一种从简单到复杂、从低级到高级的可连续操作的解决问题的方法。

它的每一步骤都是能行可操作的,并且各步骤之间是连续转换的。

本文就递归算法在程序学习中的作用及使用范围进行探讨,并对计算机的递归方法进行了阐述,通过实例说明数学递归问题的计算机实现。

关键词:递归方法;递归算法;程序设计;计算机实现
一、前言
众所周知,数学在计算机科学技术的发展中有不可替代的重要作用,如何将一个面临的实际问题转化为当前计算机系统能够处理的问题,数学理论知识在计算机上的实现是使计算机成为很好的新型数学工具的关键所在。

而递归是程序设计中非常重要的内容,绝大部分程序设计语言都涉及到用递归解决问题。

本文以递归算法为例,综述讲解了其在计算机基础学科中的知识要点,就递归算法在程序学习中的作用及使用范围进行探讨,以深化对该部分知识的掌握及运用。

二、递归方法
所谓递归是指借助于“回归”而把未知的归结为已知的。

而递归函数是一种数论函数,就是说这种函数的定义域和值域都是自然数,并且对未知数值的计算往往是要回归到已知数值才能求出。

递归是一种循环结构,它把“较复杂”情形的计算,递次地归结为“较简单”情形的计算,一直归结到“最简单”情形的计算,并得到计算结果为止。

这就是递归的实质。

对于定义是递归的,数据结构是递归的,问题的解法是递归的,都可以采用递归方法来处理。

递归论又称为“递归函数论”、“能行性理论”。

各种递归函数本身的构造也是它研究的重要方面。

递归论所研究的数论函数有精确的数学定义。

为示例起见,用递归定义式定义“斐波那契函数”如下:
初始规定:
f(0)=0,
f(1)=l,
递归运算关系:
f(n)=f(n一1)+f(n一2)。

容易看到,任意给定一个自然数n,f(n)恒可使用上述递归定义式逐步地求得。

从一般意义上说,递归定义是用简单的、自明的要素描述、构造、说明复杂的整体。

递归方法是通过解决简单的问题来解决复杂的问题。

在人们的思维过程,存在着递归机制。

对于某些问题必须用递归方法来定义或解决。

在各种科学领域中以至在社会结构中、人们的各种操作行为中,普遍存在一类具有递归结构的问题,我们把这类问题称为“递归问题”。

递归方法就是解决这类“递归问题”的精确方法。

三、递归算法
1、递归算法的基本问题:斐波那契数列
假定一对刚出生的小兔一个月后就能长成大兔,再过一个月便能生下一对小兔,并且此后每个月都生一对小兔.一年内没有发生死亡.问一对刚出生的兔子,一年内能繁殖成多少对兔子?
逐月推算,我们可以得到数列:1,1,2,3,5,8,13,21,34,……数列中的每一项,则称为“斐波那契数”.第十三位的斐波那契数,即为一对刚出生的小兔,一年内所能繁殖成的兔子的对数.从斐波那契数的构造明显看出斐波那契数列从第三项起,每项都等于前面两项的和.假定第n项斐波那契数为Fn,于是我们有:F1=F2=1;Fn+1=Fn+Fn-1(n>=2)
由以上的函数表达式我们可以看到该数列的求解就是一个递归的过程.其递归基础就是F1和F2的值,存在着不使用递归就可以解决问题的情况,即前文所说的归纳基础.该数列的向前进展情况便是其递归调用向归纳基础方向进展,即Fn+1=Fn+Fn-1(n ≥2).由此我们可以得到递归函数的两条基本的递归原则,即递归基础和向前进展.以上这种数学思想在计算机的程序设计方面有很重要的作用,利用递归调用程序设计可以解决很复杂但规律性很强的问题,并且可以使程序变得简洁易懂。

2、递归算法的设计
在递归中,算法总是不断地调用自身,当满足最后终止条件时,递归又采取自下而上的方式返回,一直返回到问题求解的第一层,递归方调用完毕。

递归执行过程中最先调用的函数,最后被返回。

在整个过程中,必须借助栈来保护现场、返回现场。

要注意递归的次数若过多,则栈的操作频繁,程序的运行效率会很低,因此,递归算法要慎用。

用递归来求解的问题必须具有两个基本特点:
(1)问题可被分解为和自身相同的子问题,且子问题更简单易处理。

(2)子问题经有限步后可得出直接的解。

一般只有满足这两个条件的问题才可用递归来处理。

通过对递归求解问题的基本特点的分析来看,可设计递归算法的步骤如下:
(1)将问题化为子问题,即归纳、推导出递归公式。

(2)设计出递归的出口,即终止条件。

由递归算法的设计步骤,我们可以进一步推导出递归算法的一般形式:
返回类型函数名(参数表) {
if (符合递归终止条件)直接求解;//终止条件
else 原函数名(参数);//递归公式}
我们由递归算法的一般形式可看到,这里必须采用if...else 的分支结构,满足条件的时候处理递归的出口,即最低层的解;否则,继续往下递归。

通过将问题分为更简单的子问题来处理后,程序的编写得到了简化,并且程序的可读性也大大增加了。

另外,对于较复杂的问题编写非递归算法难度较高,采用递归算法可提高程序员的开发效率。

三、数学递归方法的计算机实现
将一个数学递归问题用计算机实现,应完成以下几个任务:
(1)根据实际意义将数学问题转化为数学递归定义(即求数学模型)。

这是问题的关键,一个实际的数学问题可否化为递归方法定义,应看此问题能否明确地找到递归结束条件和递归体。

一般有如下两种情况:
1)有的数学问题已经是递归定义,只需确定其中的递归结束条件和递归体。

2)有的数学问题蕴含递归关系,需寻找出问题中的递归结束条件和递归体,将问题写成递归定义。

(2)明确给出求解问题所需的各已知量。

这是用计算机编写程序时需要的控制量,用来控制程序以适合当前所处理的数学间题。

如数列要求计算出多少项,某些量的初始值等。

(3)根据数学模型编写源程序。

求出数学模型之后,可采用任何一门具有递归功能的计算机语言编写出源程序。

(4)调试、修改、编译源程序,使之满足理论要求,最终使数学问题得以用计算机解决。

四、总结
1、本文阐述了数学问题中和计算机程序设计中的递归方法和递归算法的基本问题,并说明了递归算法设计的方法和步骤。

2、本文在数学递归方法的计算机实现问题上进行了方法及步骤说明。

3、此文说明了在计算机的程序设计中,灵活运用的数学知识将抽象的问题模型化是十分重要的。

参考文献
1、吴永芬,唐艳琴,张欣星,程序设计中递归的探讨.现代计算机(专业版),2010
年13期.
2、马良斋,从递归算法看数学在计算机程序设计方面的应用[J].河西学院学报,2007
年05期.
3、李志昌,论递归方法的实质和普遍意义[J].楚雄师专学报,2000年第十五卷第
1期.
4、李俐玲,数学问题的递归定义及计算机实现[J].绵阳师范高等专科学校学报,
2002年第21卷第5期.
5、陈文英、陈觉婷,递归算法及其在计算机上的实现[J].鹭江大学学报,1997年
第2期.
6、尹兰,唐翠芳,计算机专业基础课程中的递归教学.现代计算机(专业版),
2012年14期.。

相关主题