C语言程序设计基础(通识版 慕课版) 课件 第5章 常用的问题求解策略.ppt

C语言程序设计基础(通识版 慕课版) 课件 第5章 常用的问题求解策略.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

*******5.4.4递归与迭代的关系【例5.9】利用如下递归公式,用递归法编程计算并输出Fibonacci数列的前n项。//函数功能:用递归法计算Fibonacci数列中的第n项的值longFib(intn){if(n==1||n==2)//基本条件{return1;}else//一般情况{return(Fib(n-1)+Fib(n-2));//递归调用}}5.4.4递归与迭代的关系【例5.9】利用如下递归公式,用递归法编程计算并输出Fibonacci数列的前n项。intcount;//全局变量,自动初始化为0longFib(intn){count++;if(n==1)//基本条件{return1;}elseif(n==2)//基本条件{return1;}else//一般情况{return(Fib(n-1)+Fib(n-2));}}如果我们想知道计算Fibonacci数列的每一项所需的递归调用次数,那么应该如何修改程序呢?计算Fibonacci数列第n项5.4.4递归与迭代的关系建议:对时空效率要求高的场合,用迭代递推代替递归实现优点:简洁、直观、精炼缺点:重复计算多,递归层数过深时函数调用开销大,时空效率低,易导致栈溢出intcount;//全局变量,自动初始化为0longFib(intn){count++;if(n==1)//基本条件{return1;}elseif(n==2)//基本条件{return1;}else//一般情况{return(Fib(n-1)+Fib(n-2));}}5.4.4递归与迭代的关系什么情况下考虑使用递归?数学定义是递归的数据结构是递归的如队列、链表、树和图问题的解法是递归的如Hanoi塔,骑士游历、八皇后问题(回溯法)汉诺塔(Hanoi)问题假设有三根柱子,第一根上从下往上按大小顺序摞着64片黄金圆盘,要求把圆盘从下开始按大小顺序重新摆放到第二根上,规定每次只能移动一个圆盘,在小圆盘上不能放大圆盘。请编写一个程序,求解n(n1)个圆盘的汉诺塔问题5.4.4递归与迭代的关系将“上面n-1个圆盘”从A移到C将第n号圆盘从A移到B将“上面n-1个圆盘”从C移到B数学归纳法假设n-1个圆盘的汉诺塔问题已解决将“上面n-1个圆盘”看成一个整体移动n个圆盘移动n-1个圆盘5.4.4递归与迭代的关系voidHanoi(intn,chara,charb,charc){if(n==1){Move(n,a,b); } else{Hanoi(n-1,a,c,b);Move(n,a,b);Hanoi(n-1,c,b,a);}}将“n个圆盘”借助于C从A移到B将“n-1个圆盘”从A移到C将第n号圆盘从A移到B将“n-1个圆盘”从C移到Bintmain(void){intn;printf(Inputthenumberofdisks:);scanf(%d,n);printf(Stepsofmoving%ddisksfromAtoBbymeansofC:\n,n);Hanoi(n,‘A’,‘B’,‘C’);return0;}5.6AI辅助编程实例【例5.13】亲密数。如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。也就是说,亲密数的两个数不一定相等,但它们的不包含自身的因子之和必须等于对方。例如:220的因子之和为:1+2+4+5+10+11+20+22+44+55+110=284,284的因子之和为:1+2+4+71+142=220

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档