admin 管理员组

文章数量: 1087135


2024年3月18日发(作者:java为什么不能运行)

椎冁l lul " _ 一 

案例剖析 

。 

●_-I,● 

递归算法案例 

数列到函数 

◎朱冰桂改花 (广东科学技术职业学院519090) 

【摘要】递归算法是一种直接或者间接地调用自身的算 

法.在计算机编写程序中,递92-算法对解决一大类问题是十 

般的递归函数可以用如下形式表达:{【 

U +1=,(n,n ). 

分有效的,它往往使算法的描述简洁而且易于理解.递归过 

递归函数有两个要素:初始项、递推式. 

程一般通过函数或子过程来实现.递92-算法:在函数或子过 

与递归函数类似的说法,还有: 

程的内部,直接或者间接地调用自己的算法.本文通过具体 递归调用:在函数内部发出调用自身的操作. 

的数学例子来体现这一基本思想,对第二个例子进行拓展, 

递归方法:通过函数或过程调用自身将问题转换为本 

揭示了递推关系数列的函数实质. 

质相同但规模较小的子问题的方法. 

【关键词】递归;递归算法;函数;数列 

递归算法:直接或者间接地调用自身的算法. 

二、递归算法的基本思想 

递归函数(recursive function)是一个自己调用自己的函 

递归方法实际上体现了“以此类推”、“用同样的步骤重 

数.递归函数包括两种:直接递归(direct recursion)和间接递 

复”这样的思想,是算法和程序设计中的一种重要技术. 

归(indirect recursion).直接递归是指函数F的代码中直接 

三、递归算法举例 

包含了调用F的语句,而间接递归是指函数F调用了函数 

侈4 1 已知S(n)=1+2+3+-・・+n=s(n一1)+n,当 

G,G又调用了日,如此进行下去,直到F又被调用. 

我们去求s(n)时,我们是先求出s(n一1),然后再算出 

还有些数据结构如二叉树,结构本身固有递归特性;此 

s( ),具体语句为:s(n)=s(n一1)+n. 

外,有一类问题,其本身没有明显的递归结构,但用递归程 

在这个语句中,我们调用s(n)求其值的时候,必须先调 

序求解比其他方法更容易编写程序,如八皇后问题、汉诺塔 

用s(n一1)得到其值,而要得到s(n一1),又必须调用s(n一 

问题等. 

2)得到其值,同样,要求 (n一2)又要调用 (n一3),依次类 

递归时常用的编程技术,其基本思想就是“自己调用自 

推,一直要递推到s(2)=s(1)+2,由于s(1)已知为1,所以 

己”,一个使用递归技术的方法即是直接或间接地调用自身 

可以得到s(2),从而得到s(3),这样一直可以得到s(n). 

的方法.递归方法实际上体现了“以此类推”“用同样的步骤 

这个递归算法中,自身调用的语句是:s(n)=s(n一1)+ 

重复”这样的思想,它可以用简单的程序来解决某些复杂的 

n,结束递归的边界条件是:s(1)=1. 

计算问题,但是运算量较大.正因为递归程序的普遍性,我 

例2数列,(n)满足_厂(n+1)=,/2+,(n)及八1)=2, 

们应该学会使用递归来求解问题.在直接递归程序与间接 

求这个数列的前五项. 

递归中都要实现当前层调用下一层时的参数传递,取得下 

解 在递推公式I厂(n+1)= : 中,令n=1,可 

层所返回的结果,并向上一层调用返回当前层的结果.至 

得_厂(2)= +,(1)= 2+2=2. 

于各层调用中现场的保存与恢复,均由程序自动实现,不需 

再令n=2,3,4,5, 

要人工干预.因此,在递归程序的设计中关键是找出调用所 

需要的参数、返回的结果及递归调用结束的条件.如在阶乘 

可得,(5)=/(4)= 3)=v/2+_厂(2)=v/2+2=2. 

因此这个数列的前五项都是2. 

函数Fact(n)中,各层要求传递一个自然数 ,返回n Fact 

注容易看出这个数列的各项都是2,即2,2,2,2,2,2,… 

(n一1),递归调用结束的条件是n=0,据此,可以方便地写 

如果我们令厂(1)=1,则可以求出该数列的前五项分 

出它的对应程序 

别为: 

递归的基本思想 

在中学学习数列知道,数列有用通项公式定义也有用 

2)= 2+ 1)=√3, 

r—————= 

递推式定义. 

_厂(3)= 2+,(2)=√2+√3, 

女Ⅱa =2 ;ao u J=1,U2=2, >2时,U a 一】+u 一2. 

r————— ====== 

{L4、= 压丽= 2+ 2 . 

同样的,表示函数可以用显式表达式、隐式方程、参数 

厂— 三三 

方程形式和递归式. 

/(5)= 2+,(4)=√2+√2+ ̄/2+√3. 

所谓递归就是自己调用自己,递归包含两种:直接递归 

可见,递归函数除了和相应的递推式有关外,不同的开 

和间接递归. 

始项,也会使结果有很大不同. 

递归函数:用函数自身给出定义的函数,称为递归 

在上例中,如果我们修改递推式,改为f(n+1)= 

函数. 

 ̄/y+_厂(n),且令f(1)=3,则当Y=6时,我们可以得到 

数学学习与研究2012.7 

辑 l

乏 

案例剖析 

一… 

|lll| 灌 奄 

列,即当Y= ( 一1)时,数列为常数列.数列是自变量为自 

然数的函数这一思想得到体现. 

.1 - h臻 

_厂(5)=/<4)= 3)=_厂(2)=、 丽

都是3. 

=3,即数列的每--项 

如果令f(1)=4,则当Y=12时,我们可以得到f(5)= 

_厂(4)= 3)= 2): -4,即数列的每一项都是4. 

如果我们把递推式改为,(n+1)= 

的常数列. 

而且令 

_厂(1)= ,我们可以得到当Y= ( —I)时,数列是值为 

如果令l厂(1)=5,则当Y=20时,我们可以得到f(5)= 

4)=_厂(3)=_厂(2)= 而=5,即数列的每一项都是5 

综上所述,我们可以得到递归思想最终还是一种函数 

的思想,只不过在中学阶段接触到的是一些具体的数列例 

对以上各种情况我们列个表格,并设_厂(1)= . 

l厂(1) 

2 2 2 

子,让同学们感到很是新鲜好奇.而在高等数学阶段,特别 

_厂(2) 

2 

,(3) 

2 

,(4) 

2 

厂_(5) 

2 

是对于计算机专业的学生,掌握递归思想意义重大,可以帮 

助他们创新,建立新模型,如果把数学中的函数思想很好地 

融人进去,可以拓展同学们的思路,降低问题的难度. 

3 

4 

5 

6 

6 

12 

20 

30 

3 

4 

5 

6 

3 

4 

5 

6 

3 

4 

5 

6 

3 

4 

5 

6 

3 

4 

5 

6 

【参考文献】 

王信峰.计算机数学基础.北京:高等教育出版 

社。2009. 

可以发现当 ,Y满足一定的关系时,所得数列是常数 

(上接60页) 

三、解决问题的过程中。培养学生的互译能力 

设 = ,为 上的单位向量, = 为 上的 

1.运用典型例题分析,培养学生熟练地表述的能力 

对于抽象的数学符号、图形语言,我们在理解的深度与 

广度上很难与数学文字语言相媲美.故我们在解决数学问 

题时,通常会将符号及图形语言转译成文字语言.这样的例 

单位向量,则 IA BI+ 缶的方向为 BAc的角平分线 的 

施又 oI+ .A( + )的方向与 + 

子也很多,下面任举一例阐述具体做法: 

例2 已知{n }是递增数列,且对任意 ∈N 都有 

n =n +An恒成立,求实数A的取值范围. 

的方向相同_而 一一OA: :A( + ) 

= +A( + ),.・.点P在 上移动. 

..

解析由{n }是递增数列(文字语言),得口 <n +。(符 

号语言)恒成立. 

即n +an<(n+1) +A(n+1). 

..

P点的轨迹一定通过AABC的内心. 

思路 将向量语言翻译成图形语言及文字语言即町得 

答案. 

对任意n∈N 都有A>一(2n+1)恒成立. 

若设 /'t)=一(2rt+1),n∈N , 

即只需A>厂(n) ,n∈N . 

这样的例题不胜枚举.总而言之,当遇到数学问题时, 

如能注重自然语言与算法语言的转译,注重文字、图形、符 

号等语言之间的相互转译,然后再对题目进行针对性的分 

析,则难题不难矣! 

2It+1≥3. 

(2n十1)≤一3,故函数_厂(n)…=_厂(1)=一3. 

..

A>一3. 

如果教学过程中长期注重使用这种教学理念与教学方 

用分离变量法将恒成立问题转化成求函数 

法,也就很自然地教会了学生对待数学问题的~种思考厅 

式和解题习惯,当学生们面对一个较为复杂的问题时他们 

就会很自觉地多问自己几个为什么.那么每~・个小条件都 

可能有几个不同的理解与转译方式,再根据乘法原理,就会 

得到几十种的处理方案,可见再难的数学题也不难被攻克. 

这里还有一个问题值得关注:虽然条条道路通罗马,但是其 

中总有一条或几条是捷径.如何快速检索出最佳转译方案, 

这就要求学生在处理问题后要有反思的习惯;要有不断地 

反思积累

的最值问题.即“当 ∈D( )时,对于任意的 都有m>_厂( ) 

(或m<f( ))恒成立”可转译为“m>f( )…(或m< 

厂( ) ),其[}I ∈D( )”,再根据条件构造合适的函数,是 

处理这一类问题的常用转译方法. 

2.面对较难数学问题时,合理地将解题步骤分解,有助 

f学 三种语占转泽能力的培养 

例3 0是平面上一定点,A,B,C是平面上不共线的三 

点,动点P满足 = +^( + )’A∈Lo'+ 

则P点的轨迹一定通过AABC的内心.(填“外心…‘内心” 

“重心”“垂心”之一) 

积累好思路、好方法、好技巧的习惯;要有对自己已经得到 

的知识技能进行恰当的资源管理的习惯,进而形成自己的 

资料库.这样,如果遇到问题时就有了“一类题”或“触类旁 

通”的感觉,处理起来才会快捷,得心应手. 

数学学习与研究2012 7 

解析 它的解题思想主要还是对向量语言的转译. 


本文标签: 递归 问题 函数 调用 语言