- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
什么是递归算法
递 归 算 法 什么是递归算法? 递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。 斐波那契的兔子问题 某人有一对兔子饲养在围墙中,如果它们每个月生一对兔子,且新生的兔子在第二个月后也是每个月生一对兔子,问一年后围墙中共有多少对兔子。 分析: 第一个月是最初的一对兔子生下一对兔子,围墙内共有两对兔子。第二个月仍是最初的一对兔子生下一对兔子,共有3对兔子。到第三个月除最初的兔子新生一对兔子外,第一个月生的兔子也开始生兔子,因此共有5对兔子。继续推下去,第12个月时最终共有对377对兔子。每个月的兔子总数可由前两个月的兔子数相加而得。 算法: ①??? 输入计算兔子的月份数:n ②??? If n 3 Then c = 1 Else a = 1: b = 1 ③??? i = 3 ④??? c = a + b:a = b:b = c ⑤??? i=i+1,如果i≤n则返回④ ⑥??? 结束 Private Sub Command1_Click() ? n = Val(Text1.Text) ? If n 3 Then c = 1 Else a = 1: b = 1 ? For i = 3 To n ??? c = a + b ??? a = b ??? b = c ? Next i ? Text2.Text = 第 n 月的兔子数目是: c End Sub 开动脑筋: 我们有没有更简单的方法解决该问题呢? 中医讲“肾藏精”指的是人体的“精”要储藏在“肾”当中,不能随意消耗、透支。藏在肾中的“精”赖于肾阳的闭藏和激发作用,才得以不断的化生和滋长。肾透支了,出现,腰腿酸痛,周身乏力,四肢发冷,性功能下降以及房事后太累,乏力等症状,让人感觉身体被掏空了。肾透支的根源是肾阳虚衰,导致肾精不足,不固,不生而引起的。因此,只要平时注意,温补肾阳,就能把消耗的“精”补回来。医圣张震岳认为,阴阳互根,故善补阳者,必于阴中求阳,则阳得阴助,而生化无穷,所以肾阳虚,不能单纯的补肾阳,最佳办法是补肾阳的同时也滋肾阴。、补肾气。这样才能把肾阳虚导致的肾透支补的更好,这就好比一盏很暗的油灯,单纯的挑大油芯(补阳)只会加快油灯的熄灭,只有在挑大灯芯的同时添加灯油(滋阴),并保证充足的氧气(补气)才能光亮。马氏中医徽芯msdf003 (1)分析问题 我们可以根据题意列出表来解决这个问题: 兔子问题分析表 交流: 仔细研究兔子问题分析表,你有些什么发现?每一个月份的大兔数、小兔数与上一个月的数字有什么联系,能肯定这个规律吗? (2)设计算法。 “兔子问题”很容易列出一条递推式而得到解决。假设第N个月的兔子数目是F(N),我们有: ? 这是因为每月的大兔子数目一定等于上月的兔子总数,而每个月的小兔子数目一定等于上月的大兔子数目(即前一个月的兔子的数目)。 由上述的递推式我们可以设计出递归程序。递归程序的特点是独立写出一个函数(或子过程),而这个函数只对极简单的几种情况直接给出解答,而在其余情况下通过反复的调用自身而把问题归结到最简单的情况而得到解答。 知识复习: 自定义函数的定义格式: Function procedurename(arguments) [As type] Statements End Function 其中的procedurename是函数名,arguments是函数中的参数表,type是函数返回值的数据类型,[]表示可有可无的部分,statements是过程中的代码 调用函数的格式: procedurename(arguments) (3)编写程序 窗体中开设一个文本框Text1用于填人月数N,设置命令框Commandl,点击它即执行程序求出第N月的兔子数。然后用文本框Text2输出答案。 根据递推式可以写出递归程序如下: ? Function Fib(ByVal N As Integer) As Long ?? If N 3 Then Fib = 1 Else Fib = Fib(N - 1) + Fib(N - 2) End Function Private Sub Command1_Click() ??? N = Val(Text1.Text) ??? Text2.Text = 第 N 月的兔子数目是: Fib(N) End Sub (4)调试程序 因为这个算法的效率不高,建
文档评论(0)