函数的递归调用与分治策略(Recursive call and divide and conquer strategy of function).docVIP

函数的递归调用与分治策略(Recursive call and divide and conquer strategy of function).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
函数的递归调用与分治策略(Recursive call and divide and conquer strategy of function)

函数的递归调用与分治策略(Recursive call and divide and conquer strategy of function) [代码] / / ex2.cpp #包括 iostream。” 长斐波那契(int x) { 如果((x = = 1)| |(X = = 2)) 返回(1); 其他的 返回(Fibonacci(X-1)+斐波那契(x-2)); } main() { int n; CIN; cout endl斐波那契(N); } [ 3 ]河内塔问题例。 [问题描述]在霍比特人的圣庙里,有一块黄铜板,上面插着3根宝石针(分别为一号,B号和C号)。在一号针上从下到上套着从大到小的N个圆形金片。现要将一针上的金片全部移到C针上,且仍按照原来的顺序叠置。移动的规则如下:这些金片只能在3根针间移动,一次只能一片,且任何时候都不允许将较大的金片压在较小的上面。从键盘输入N,要求给出移动的次数和方案。 [分析]由金片的个数建立递归关系。当n = 1时,只要将唯一的金片从一移到C即可。当n>1时,只要把较小的(n-1)片按移动规则从一移到B,再将剩下的最大的从一移到C(即中间”借助“B把金片从一移到C),再将B上的(n-1)个金片按照规则从B移到C(中间”借助”)。 本题的特点在于不容易用数学语言写出具体的递归函数,但递归关系明显,仍可用递归方法求解。 [代码] / / ex3.cpp #包括 iostream。” 河内(int n,char T1,char T2,char T3){ 如果(n=1) cout “1” T1 ” T3 endl; 其他的 { 河内(n-1,T1,T3,T2); cout N ” T1 ” T3 endl; 河内(n-1,T2,T1,T3); } } main() { int n; cout “请输入河内数字:“; CIN; cout “回答:“ endl; 河内(N,A,B,C); } 函数递归调用的应用与分治策略 许多算法都采用了分治策略求解,而可以说分治与递归是一对孪生兄弟,它们经常同时被应用于算法的设计中。下面讨论著名的加泰罗尼亚数问题,人们在对它的研究中充分应用了分治策略。 [ 4 ]例加泰罗尼亚数问题。 [问题描述]一个凸多边形,通过不相交于N边形内部的对角线,剖分为若干个三角形。求不同的剖分方案总数H(N),H(n)即为加泰罗尼亚数。例如,n = 5时H(5)= 5。 [分析]加泰罗尼亚数问题有着明显的递归子问题特征。在计算加泰罗尼亚数时虽然可以推导出只关于N的一般公式,但在推导过程中却要用到递归公式。下面讨论三种不同的解法,其中第三种解法没有使用递归,它是由前两种解法推导而出的。 [ 1 ]解法对于多边形V1V2…VN,对角线v1vi(我= 3,4,…,n)将其分为两部分,一部分是我边形,另一部分是N-1个+ 1边形。因此,以对角线v1vi为一个剖分方案的剖分方案数为H(我)×H(n i + 1)。还有一种的特殊情形,是对角线v2vn将其分为一个三角形v1v2vn和一个N-2 + 1边形为了让它同样符合粗体字给出的公式,规定。H(2)= 1。于是得到公式: h(n)=∑H(我)×H(n i + 1)(我= 2,3,…,n)----公式(1) h(2)=1 有了这个递归关系式,就可以用递推法或递归法解出h(n)。 [ 2 ]解法从V1 V2和向除了VN外的n-3个顶点可作n-3条对角线。每一条对角线v1vi把多边形剖分成两部分,剖分方案数为H(我)×H(N I + 2),由于VI可以是v3v4…-1中的任一点可换成且V1,V2, V3,... Any point in Vn has the same result. Taking into account that the same diagonal is repeated once at 2 vertices, the split scheme determined by vertices and diagonals is multiplied by 1/2, so there is H (n), =n, sigma (1/2), H (I), *H (n-i+2) (i=3,4),... (n-1) Mention (1/2) outside sigma, H (n), =n/ (2* (n-3)), sigma H (I), *H (n-i+2) (i=3,4),... (n-1) - formula (2) It is reasonable to specify H (2) =H (3) =1. By formula (2) and H (2) =1, H (n) can also be solved

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档