C语言:递归算法.pdfVIP

  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文档。上传文档
查看更多
C语⾔:递归算法 ⼀:递归的概念,什么是? 递归函数最通俗的讲法就是先传递,在⼀次⼀次的传递后再归来! 下⾯这个图能够很好的解释出递归函数的主要⼯作原理(红线先⾛绿线跟后) 1 void fun(int n) 2 { 3 if (n 9) 4 { 5 fun(n/10); 6 } 7 printf(%d , n % 10); 8 } 递归作为⼀种⾮常常⽤的算法,其本⾝定义为⼀个过程或函数在其定义或说明中有直接或间接 调⽤⾃⾝的 ⼀种⽅法, 简单点来说 就是 ⼀个函数段中套⽤了本函数,进⾏⼀定的重复循环,将⼀个⼤的问题层层转化为⼀个与原问题相似 的规模较⼩的问题来解决! 其最主要要求的是: 把⼤事化⼩。 递归算法有两个必要条件: 1.存在⼀个限制条件,使得满⾜这个条件时,递归能够主动不再继续进⾏。 2.在每次递归调⽤后,都必须更接近这个限制条件。 (在我个⼈看来,递归算法更像是⼀个循环,将该循环独⽴到⼀个函数中去,使后⾯使⽤时更⽅便!在我们写⼀个递归函数时,必须要明⽩ 使⽤这个函数是为了求什么,这个函数的功能是什么!函数的功能应该更简谱,单⼀!不应掺杂进去别的与写该函数⽬的不相符的代码! 例如: 1 //递归⽅式求阶乘(不考虑溢出问题!) 2 int fac(int n) 3 { 4 if (n = 1) 5 { 6 return 1; 7 } 8 return n * fac(n-1); 9 } 上⾯是⼀个求阶乘的递归函数,其主要功能就是求⼀个数的阶乘,因此我们不应该在其中加⼊输⼊,输出等等功能!) ⼆:递归函数的运⽤。 (递归函数最主要,也是最难的⼀部就是寻找⼀个等价关系式,使得在⼀次⼀次的使⽤递归时能够更接近⾃⼰的⽬的!) 斐波那契数列 斐波那契数列的是这样⼀个数列:1、1、2、3、5、8、13、21、34…,即第⼀项 f(1) = 1,第⼆项 f(2) = 1…,第 n 项⽬为 f(n) = f(n- 1) + f(n-2)。求第 n 项的值是多少。 ⾸先,我们要明⽩⽤递归写这个函数的主要功能是找到第n项的值是多少? 我们观察数列,前两项为1,第三项为前两项的和,第四项等于第⼆ 三项的和,因此我们可以得出⼀个结论,第n项等于第(n-1)与第 (n-2)项的和! 同时,我们应该注意到两个必要条件,存在⼀个限制条件,每次递归后更接近该递归函数!(每次运算都要在n的基础上-1,知道n=1或者 n=2时停⽌! 因此我们可以写出⼀下代码 1 int finbo(int n) 2 { 3 if (n == 1 || n == 2) 4 { 5 return 1; 6 } 7 els 8 { 9 return finbo(n - 1) + finbo(n - 2); 10 } 11 } ⼀个有明确,唯⼀功能的递归函数就写出来了 最终代码如下 1 #define _CRT_SECURE_NO_WARNINGS 1 2 #includestdio.h 3 #includemath.h 4 #includestdlib.h 5 #includestring.h 6 #includestdbool.h 7 int finbo(int n) 8 { 9 if (n == 1 || n == 2) 10 { 11 return 1; 12 } 13 else 14 { 15 return finbo(n - 1) + finbo(n - 2); 16 } 17 } 18 int main() 19 { 20 int n; 21 scanf(%d, n); 22 int m = finbo(n); 23 printf(%d, m); 24 return 0; 25 }

文档评论(0)

洞察 + 关注
官方认证
文档贡献者

博士生

认证主体宁夏三科果农牧科技有限公司
IP属地宁夏
统一社会信用代码/组织机构代码
91640500MABW4P8P13

1亿VIP精品文档

相关文档