汉诺塔课件学习.pptx
《汉诺塔课件学习.pptx》由会员分享,可在线阅读,更多相关《汉诺塔课件学习.pptx(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Contents7.1 为什么要用函数为什么要用函数7.2 怎样定义函数怎样定义函数7.3 调用函数调用函数7.4 函数声明和函数原型函数声明和函数原型7.5 函数的嵌套调用函数的嵌套调用第1页/共86页Contents7.6 函数的递归调用函数的递归调用7.7 数组作函数参数数组作函数参数7.8 局部变量和全局变量局部变量和全局变量7.9 变量存储方式和生存期变量存储方式和生存期7.10 变量的声明和定义变量的声明和定义第2页/共86页复习复习将事先编好的函数,采用将事先编好的函数,采用“组装组装”的办法简化的办法简化程序设计的过程。程序设计的过程。1.模块化程序设计思路模块化程序设计思路m
2、ain()a()b()c()d()e()f()h()g()m()第3页/共86页复习复习将事先编好的函数,采用将事先编好的函数,采用“组装组装”的办法简化的办法简化程序设计的过程。程序设计的过程。function 功能。所以,从本质意义来说函数功能。所以,从本质意义来说函数就是用来完成一定功能的。就是用来完成一定功能的。1.模块化程序设计思路模块化程序设计思路2.函数是从英文哪个单词翻译过来的函数是从英文哪个单词翻译过来的第4页/共86页复习复习将事先编好的函数,采用将事先编好的函数,采用“组装组装”的办法简化的办法简化程序设计的过程。程序设计的过程。function 功能。所以,从本质意义来
3、说函数功能。所以,从本质意义来说函数就是用来完成一定功能的。就是用来完成一定功能的。则使用函数可以实现代码的(则使用函数可以实现代码的()性)性。1.模块化程序设计思路模块化程序设计思路2.函数是从英文哪个单词翻译过来的函数是从英文哪个单词翻译过来的3.若程序中要多次实现某一功能若程序中要多次实现某一功能第5页/共86页复习复习将事先编好的函数,采用将事先编好的函数,采用“组装组装”的办法简化的办法简化程序设计的过程。程序设计的过程。function 功能。所以,从本质意义来说函数功能。所以,从本质意义来说函数就是用来完成一定功能的。就是用来完成一定功能的。则使用函数可以实现代码的(则使用函数
4、可以实现代码的(重用重用)性)性。1.模块化程序设计思路模块化程序设计思路2.函数是从英文哪个单词翻译过来的函数是从英文哪个单词翻译过来的3.若程序中要多次实现某一功能若程序中要多次实现某一功能第6页/共86页复习复习 形参形参 实参实参4.函数调用过程函数调用过程int max(int x,int y)int max(int x,int y)int z;int z;z=(xy)?x,y;z=(xy)?x,y;return z;return z;c=max(a,b);c=max(a,b);(main函数)值值39第7页/共86页复习复习int max(int x,int y)int max(i
5、nt x,int y)int z;int z;z=(xy)?x,y;z=(xy)?x,y;return z;return z;c=max(a,b);c=max(a,b);(main函数)形参形参 实参实参值值394.函数调用过程函数调用过程第8页/共86页复习复习int max(int x,int y)int max(int x,int y)int z;int z;z=(xy)?x,y;z=(xy)?x,y;return z;return z;c=max(a,b);c=max(a,b);(main函数)形参形参 实参实参值值3994.函数调用过程函数调用过程第9页/共86页复习复习int ma
6、x(int x,int y)int max(int x,int y)int z;int z;z=(xy)?x,y;z=(xy)?x,y;return z;return z;c=max(a,b);c=max(a,b);(main函数)调用前,形参调用前,形参调用前,形参调用前,形参x x和和和和y y不占内存不占内存不占内存不占内存调用时,为形参调用时,为形参调用时,为形参调用时,为形参x x和和和和y y分配内存分配内存分配内存分配内存结束时,结束时,结束时,结束时,释放释放释放释放x x和和和和y y 形参形参 实参实参值值3994.函数调用过程函数调用过程第10页/共86页复习复习 声明的
7、作用声明的作用5.函数声明函数声明把函数头信息把函数头信息把函数头信息把函数头信息,如如如如int max(int x,int y)int max(int x,int y)通知给编译系统,以便在调用时系统通知给编译系统,以便在调用时系统通知给编译系统,以便在调用时系统通知给编译系统,以便在调用时系统按按按按此此此此检查检查检查检查调用的合法性调用的合法性调用的合法性调用的合法性。c=max(a,b);c=max(a,b);第11页/共86页复习复习在在 哪里哪里 对对 谁谁 进行声明:进行声明:主调函数内部对被调用函数进行声明主调函数内部对被调用函数进行声明5.函数声明函数声明若若若若main
8、()main()调用调用调用调用max()max(),则在(,则在(,则在(,则在()函数内)函数内)函数内)函数内部,对(部,对(部,对(部,对()函数进行声明。)函数进行声明。)函数进行声明。)函数进行声明。第12页/共86页复习复习在在 哪里哪里 对对 谁谁 进行声明:进行声明:主调函数内部对被调用函数进行声明主调函数内部对被调用函数进行声明5.函数声明函数声明若若若若main()main()调用调用调用调用max()max(),则在(,则在(,则在(,则在(mainmain)函数)函数)函数)函数内部,对(内部,对(内部,对(内部,对(maxmax)函数进行声明。)函数进行声明。)函数
9、进行声明。)函数进行声明。第13页/共86页复习复习声明方法:函数原型(首部)加分号声明方法:函数原型(首部)加分号5.函数声明函数声明void main()void main()int a,b;int a,b;int max(int x,int y);int max(int x,int y);第14页/共86页复习复习与函数定义的区别:函数定义是指对函数功能与函数定义的区别:函数定义是指对函数功能的确立。包括函数首部和函数体两部分的确立。包括函数首部和函数体两部分5.函数声明函数声明int max(int x,int y)int max(int x,int y)int z;int z;z=x
10、y?x:y;z=xy?x:y;return z;return z;与变量类似,与变量类似,先定义,后使用。先定义,后使用。第15页/共86页复习复习在(在()情况下,声明也可以被省略。)情况下,声明也可以被省略。5.函数声明函数声明int max(int x,int y)int max(int x,int y)int z;int z;z=xy?x:y;z=xy?x:y;return z;return z;void main()void main()int a=3,b=9,c;int a=3,b=9,c;c=max(a,b);c=max(a,b);第16页/共86页复习复习在(在()情况下,声明
11、也可以被省略。)情况下,声明也可以被省略。5.函数声明函数声明int max(int x,int y)int max(int x,int y)int z;int z;z=xy?x:y;z=xy?x:y;return z;return z;void main()void main()int a=3,b=9,c;int a=3,b=9,c;c=max(a,b);c=max(a,b);主函数和其它函数,主函数和其它函数,表面上平行并列表面上平行并列的关系,的关系,实际上是主调与被调实际上是主调与被调的关系的关系第17页/共86页复习复习一个函数的执行过程中,又去调用另一函数。一个函数的执行过程中,又
12、去调用另一函数。6.函数的嵌套调用函数的嵌套调用int int max4max4(int a,int b,int c,int d)(int a,int b,int c,int d)int m,n;int m,n;m=m=max2max2(a,b);(a,b);n=n=max2max2(c,d);(c,d);return return max2max2(m,n);(m,n);第18页/共86页复习复习一个函数的执行过程中,又去调用一个函数的执行过程中,又去调用自己本身自己本身。一种特殊的嵌套调用一种特殊的嵌套调用int int fun(int n)fun(int n)int c;int c;if
13、(n=1)c=0;if(n=1)c=0;else else c=n*c=n*fun(n-1)fun(n-1)return return c;c;第19页/共86页复习复习一个函数的执行过程中,又去调用一个函数的执行过程中,又去调用自己本身自己本身。一种特殊的嵌套调用一种特殊的嵌套调用int int fun(int n)fun(int n)int c;int c;if(n=1)c=0;if(n=1)c=0;else else c=n*c=n*fun(n-1)fun(n-1)return return c;c;第20页/共86页7.6 函数的递归调用函数的递归调用定义定义函数执行的过程中,函数执行
14、的过程中,直接或者间接的调用直接或者间接的调用该函数本身,称为函该函数本身,称为函数的递归调用。数的递归调用。包括:回溯和递推包括:回溯和递推 两个过程两个过程 int fun(int n)z=n*fun(n-1);第21页/共86页引例:了解递归问题的回溯和递归两个过程引例:了解递归问题的回溯和递归两个过程例例7.6 有有5个学生,个学生,问第问第5个学生几岁,他说比第个学生几岁,他说比第4个学生大个学生大2岁。岁。问第问第4个学生几岁,他说比第个学生几岁,他说比第3个学生大个学生大2岁。岁。问第问第3个学生几岁,他说比第个学生几岁,他说比第2个学生大个学生大2岁。岁。问第问第2个学生几岁,
15、他说比第个学生几岁,他说比第1个学生大个学生大2岁。岁。问第问第1个学生几岁,他说自己个学生几岁,他说自己10岁。岁。请问第请问第5个学生几岁?个学生几岁?假设此问题中,求年龄的函数为假设此问题中,求年龄的函数为int age(int n)第22页/共86页公式公式age(n)=10 n=1age(n-1)+2 n1第23页/共86页公式公式age(n)=10 n=1age(n-1)+2 n1推导公式方法:推导公式方法:1.一般第一次回溯,例如由一般第一次回溯,例如由age(5)=age(4)+2,之后再抽象成一般形式,就可推导出上述公式。之后再抽象成一般形式,就可推导出上述公式。2.添加结束
16、条件,即添加结束条件,即n=1或或0时的值。时的值。第24页/共86页公式公式age(n)=10 n=1age(n-1)+2 n1推导公式方法:推导公式方法:1.一般第一次回溯,例如由一般第一次回溯,例如由age(5)=age(4)+2,之后再抽象成一般形式,就之后再抽象成一般形式,就可推导出上述公式。可推导出上述公式。2.添加结束条件,即添加结束条件,即n=1或或0时的值。时的值。推导出公式是解决递归问题的关键推导出公式是解决递归问题的关键第25页/共86页按照公式书写程序按照公式书写程序公式左边公式左边函数首部函数首部公式右边公式右边函数体函数体age(n)=10 n=1age(n-1)+
17、2 n1第26页/共86页int age(int n)if(n=1)return 10;else return age(n-1)+2;公式左边公式左边函数首部函数首部公式右边公式右边函数体函数体age(n)=10 n=1age(n-1)+2 n1按照公式书写程序按照公式书写程序第27页/共86页int age(int n)if(n=1)return 10;else return age(n-1)+2;公式左边公式左边函数首部函数首部公式右边公式右边函数体函数体age(n)=10 n=1age(n-1)+2 n1按照公式书写程序按照公式书写程序注意:函数体中有函数自己注意:函数体中有函数自己第2
18、8页/共86页练习练习 例例7.7用递归方法求用递归方法求n!1.验证此问题是否可使用递归方法验证此问题是否可使用递归方法2.推导公式:推导公式:(1)一般第一次回溯一般第一次回溯(2)添加结束条件,即添加结束条件,即n=1或或0时的值。时的值。第29页/共86页3层层15层层64层层Hanoi(汉诺)塔问题(汉诺)塔问题第30页/共86页 古典数学问题。古典数学问题。问题描述:古代有个一梵塔,塔内有问题描述:古代有个一梵塔,塔内有三个座三个座A、B、C,开始时,开始时A座上有座上有64个盘子,盘子大小不等,个盘子,盘子大小不等,大的在下大的在下,小的在上小的在上。有一个老和尚想把这。有一个老
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉诺塔 课件 学习
限制150内