5.5递归算法实例及程序实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例子1、2都是抽象出来的递归现象,但是严格来 说并不是递归,因为会一直重复下去,没有终止 条件,违背算法的“有穷性”。
例3和例4有终止条件 例3中思想端正 例4中最后完全看懂的词
2、递归算法
递归算法: 一个函数直接或间接地调用自身的编程技巧 1. 直接递归调用:函数直接调用本身 2. 间接递归调用:函数间接调用本身
递归实例2
有5个人坐在一起,问第5个人多少岁,他说比第4个 人大2岁;问第4个人岁数,他说比第3个人大2岁;问 第3个人,又说比第2个大2岁;问第2个人,说比第1 个人大2岁;最后问第1个人,他说他10岁;请问 第5个人多大?
终止条件:第一个人10岁 递归关系:每一个人的年龄都比其前1个人的年龄大
递归算法
1、递归现象
例子1:
从前有座山,山里有座庙,庙里有个和尚, 和尚在讲故事。
从前有座山,山里有座庙,庙里有个和尚,和尚 在讲故事。
从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事。
从前有座山…
例子2:
两面镜子中间的你,产生“像中像” 德罗斯特效应(Droste effect)
例子3:
jc(3)
=3*jc(2)
=3*2 调用 jc(2)
=6
返回
=2*jc(1) =2*1 调用
jc(1)
=2 返回 =1
Private Sub Command1_Click()
a = Val(Text1.Text) b = jc(a)
递归函数的调用
Label1.Caption = str(a)+“的阶乘为:”Str(b)
3!=3*2*1=3*2!
2!=2*1=2*1!
1!=1
1:对于任意一个整数n (n>1): n!=n*(n-1)!
2:终止条件 n=1 1!=1
Function jc(n as integer) as integer
If n =1 then
jcjc(1=)1=1
‘1、终止条件:n=1 时jc(1)=1
End Function
习题2:小猴吃桃问题
有一天小猴子摘若干个桃子,当即吃了一半还觉得不过瘾,又多 吃了一个。第二天接着吃剩下桃子中的一半,仍觉得不过瘾 又多吃了一个,以后小猴子都是吃尚存桃子一半多一个。到 第10天早上小猴子再去吃桃子的时候,看到只剩下一个桃子。 问小猴子第一天共摘下了多少个桃子?
age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age (2)+2
age(2)=age(1)+2
Function age (n as Integer)as Integer If n=1 then
age(1)=10
age =___1_0____
Else age=__a_g_e_(n__-1_)_+_2_
《礼记·大学》:
古之欲明明德于天下者,先治其国;欲治其 国者,先齐其家;欲齐其家者,先修其身; 欲修其身者,先正其心;欲正其心者,先诚 其意;欲诚其意者,先致其知,致知在格物。 物格而后知至,知至而后意诚,意诚而后心 正,心正而后身修,身修而后家齐,家齐而 后国治,国治而后天下平。
美德彰明于天下 治理好国家 整顿好家 自我修养
End if
End Function
习题1:斐波那契数列问题
斐波那契数列,又称黄金分割数列,指的是这样一个数列: 1、1、2、3、5、8、13、21、34、55……
这个数列从第3项开始,每一项都等于前两项之和。 设计一个VB程序 求:数列中的第n项是多少?
1、终止条件:最初两项值为1 2、递归关系:第n项的值是它之前两项之和 ( n大于3 )
else
jjcc=(nn)*=jcn(n*j-c1()n-1)
‘2、对于任意n>1找出jc(n)和jc(n-1)之 间的关系n!=n*(n-1)!
End if
End function
Function jc(byval n as integer) as integer
If n =1 then jc=1 else jc=n*jc(n-1) End if End Function
求第N个斐波纳切数 if 前两项 then 斐波纳切数=1 else 斐波纳切数=前两个斐波纳切数之和 end if
Function Fib (n as Integer)as Integer If n<3 then Fib =__1 Else Fib =__F_ib__(_n_-_2)_+_F_i_b__(n_-_1_)_ End if
直接递归调用
和尚讲故事:故事包含故事,故事都是同一故事
程序设计中,函数A自己调用自己,称为直接递归调用。
间接递归调用
镜子A和镜子B相对放在一起,你会发现 什么现象呢?
对了,我们会发现镜子
A中有镜子B的映象,镜
子B中又镜子A的映象,
这样层层叠叠,无穷无
A
尽。
B
在程序设计中,像这种函
数A调用函数B,函数B再反
End Sub
递归算法的基本思想是把规模较大的、较难解决的问题变 成规模较小的、容易解决的同一问题,规模较小的问题又 变成规模更小的问题,当问题小到一定程度时,可以直接 得出它的解,从而得到原来问题的解。 即采用“大事化小、小事化了”的基本思想。
当n=3时
y=jc(3)化小 jc=3*jc(2) 化小 jc=2*jc(1) 化了 jc=1
递归算法描述: Function 你有多少桃子?(第几天) If 第10天 Then 桃子数=1 Else 桃子数= ( 明天的桃子数+1)*2 End if End Function
过来调用函数A的算法,
称为间接递归调用。
递归算法是语言设计中的一种重要方法,只需少量 的程序就可描述出解题过程,但是递归执行的过程 比较复杂。
递归算法关键:
1.递归关系 2.递归终止条件
递归实例1
设计一个vb程序,
输入正整数n,求出n的阶乘
5!=5*4*3*2*1=5*4!
Fra Baidu bibliotek
4!=4*3*2*1=4*3!
平天下 治国 齐家 修身
思想端正
例子4:
为了解释一个词,需要使用更多的词。
当你查一个词,发现这个词的解释中某个词仍然不 懂,于是你开始查第二个词,可惜,第二个词里仍 然有不懂的词,于是查第三个词,这样查下去,直 到有一个词的解释是你完全能看懂的,那么递归走 到了尽头,然后你开始后退,逐个明白之前查过的 每一个词,最终,你明白了最开始那个词的意 思。。。
相关文档
最新文档