04 第四章节 函数.ppt

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

§4.5 递归程序设计 在函数定义中,一个函数直接或间接地调用自己,称递归调用,这类函数为递归函数。 1)直接递归 2)间接递归 f(int x) f1( ) f2( ) { …… { …… { …… f(x-1); f2( ); f1( ); …… …… …… } } } 递归调用是无终止的自身调用,因此在递归函数中应该用if语句或其它分支语句,判断当某些条件成立时结束递归调用 例: // 功能:使用递归程序计算Fibonacci序列。 #include iostream.h int fibonacci(int n) { int result; ? if (n 2) result = 1; else result = fibonacci(n - 1) + fibonacci(n - 2); return result; } ? int main() { int loop;// 循环变量 // 输出Fibonacci序列的前6个数 for (loop = 0; loop = 5; loop = loop + 1) { cout fibonacci(loop) ; } cout \n; return 0; } int fibonacci(int n) { int result, i, pre1, pre2 ; result = 1; i =2; pre2 = 1 ; while (i=n) { pre1 = pre2 ; pre2 = result ; result = pre1 + pre2; i++; } return result; } ??? 设n为5,则有: ??? F(5)=F(3)+F(4) ??? =F(1)+F(2)+F(2)+F(3) ??? =F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(2) ??? =F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(0)+F(1) ??? =1+1+1+1+1+1+1+1 ??? =8 分析如下: 递归函数 设计一递归函数,求x的y次幂. 分析:对于y为正整数的情况,构造递归公式(函 数)如下: power(x,0)=1, y=0 power(x,y)=power(x, y-1)*x, 其他 #includeiostream.h double power(double x, int y) { if (y==0) return 1; else return x*power(x, y-1); } void main( ) { double x; int y; cout“input x, y: “; cinxy; cout“power(“x“,”y“)=“power(x,y)endl; } 求最大公约数程序如何改为递归? int rgcd(int v1, int v2) { if (v2!=0) return rgcd(v2, v1%v2); return v1; } while (r!=0) { m=n; n=r; r=m%n; } 例:梵塔问题 盘按由小到大的顺序标上号码1~n。开始时n个盘全套在A柱上,且小的放在大的上面,如图所示。游戏要求按下列规则将所有的盘从A柱移到C柱,在移动过程中可以借助另一个B柱。 规则1:每次只能移动柱最上面的一个盘; 规则2:任何盘都不得放在比它小的盘上。 A B C 1 2 n 递归思路: 把A上的n个盘运到C上 先把n-1个盘从A搬到B,借助C 把A上剩下的最大的一个盘搬到C 再把n-1个盘从B搬到C,借助A 当n==1时,直接从A搬到C即可 程序 #include iostream.h ?// 将disk_num个盘从from柱移到to柱,可以借助aux柱 void move_tower(int disk_num, char from, char to, char aux) { if (disk_num == 1) { // 仅有一个盘时,直接从from柱移到to柱

文档评论(0)

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

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

1亿VIP精品文档

相关文档