计算机程序设计基础课程教学PPTF.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《计算机程序设计基础课程教学PPTF.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计基础课程教学PPTF.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础乔乔 林林计算机程序设计基础计算机程序设计基础Email:Email:Tel:62780973Tel:62780973清华大学计算机科学与技术系清华大学计算机科学与技术系2清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础第十二章 递归程序设计学习目标学习目标了解递归可以简化复杂问题的编程实现了解递归可以简化复杂问题的编程实现了解递归可以简化复杂问题的编程实现了解递归可以简化复杂问题的编程实现理解递归程序设计范型理解递归程序设计范型理解递归程序
2、设计范型理解递归程序设计范型理解函数递归调用的内部实现机制理解函数递归调用的内部实现机制理解函数递归调用的内部实现机制理解函数递归调用的内部实现机制熟悉典型递归程序的范例熟悉典型递归程序的范例熟悉典型递归程序的范例熟悉典型递归程序的范例能够编写简单的递归程序能够编写简单的递归程序能够编写简单的递归程序能够编写简单的递归程序3清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础12.1 递归问题的引入递归的目的递归的目的简化复杂问题的手段:将问题逐步化简,在化简简化复杂问题的手段:将问题逐步化简,在化简简化复杂问题的手段:将问题逐步化简,在化简简化
3、复杂问题的手段:将问题逐步化简,在化简过程中保持原问题的性质不变,直到问题最简,过程中保持原问题的性质不变,直到问题最简,过程中保持原问题的性质不变,直到问题最简,过程中保持原问题的性质不变,直到问题最简,可以轻易获得答案,然后将简化问题的答案组装可以轻易获得答案,然后将简化问题的答案组装可以轻易获得答案,然后将简化问题的答案组装可以轻易获得答案,然后将简化问题的答案组装成原始问题的解成原始问题的解成原始问题的解成原始问题的解递归示例递归示例n n!=1!=1 2 2 3 3 n n:n n!=(!=(n n-1)!1)!n n;0!=1;0!=1x xn n=x x x x x x x x:
4、x xn n=x xn n-1 1 x x;x x0 0=1=14清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归函数示例一阶乘的计算阶乘的计算long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult=1;=1;int int i i=0;=0;while(+while(+i i=n n)result result*=*=i i;return return resultresult;long int long int CalF
5、actorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;=1;else else resultresult=n n*CalFactorialCalFactorial(n n 1);1);return return resultresult;5清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归函数示例二幂的计算幂的计算long double long double CalPowerCalPowe
6、r(long double(long double x x,int,int n n)long double long double resultresult;if(if(n n=0)=0)resultresult=1;=1;else else resultresult=x x*CalPowerCalPower(x x,n n 1);1);return return resultresult;6清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归函数示例三求整数的各位数字之和求整数的各位数字之和int int SumDigitSumDigit(
7、int(int n n)if(if(n n 10)10)return return n n;else else return return n n%10+%10+SumDigitSumDigit(n n/10);/10);7清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪阶乘的计算阶乘的计算#include#include long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n
8、=1)=1)resultresult=1;=1;else else resultresult=n n*CalFactorialCalFactorial(n n 1);1);return return resultresult;void void mainmain()()int int numnum=3;long int =3;long int facfac;facfac=CalFactorialCalFactorial(numnum););printfprintf(“%(“%ldld”,”,facfac););8清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序
9、序设设计计基基础础递归过程的跟踪main()函数栈框架函数栈框架9清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪第一次调用第一次调用 CalFactorial()函数栈框架函数栈框架long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;else =1;else resultresult=n n*CalFactorialCalFacto
10、rial(n n 1);1);return return resultresult;10清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪第二次调用第二次调用 CalFactorial()函数栈框架函数栈框架long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;else =1;else resultresult=n n*CalFactor
11、ialCalFactorial(n n 1);1);return return resultresult;11清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪第三次调用第三次调用 CalFactorial()执行后栈框架执行后栈框架long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;else =1;else resultresult=
12、n n*CalFactorialCalFactorial(n n 1);1);return return resultresult;12清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪第二次调用第二次调用 CalFactorial()执行后栈框架执行后栈框架long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;else =1;else
13、resultresult=n n*CalFactorialCalFactorial(n n 1);1);return return resultresult;13清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪第一次调用第一次调用 CalFactorial()执行后栈框架执行后栈框架long int long int CalFactorialCalFactorial(int(int n n)long int long int resultresult;if(if(n n=0|=0|n n=1)=1)resultresult=1;
14、else =1;else resultresult=n n*CalFactorialCalFactorial(n n 1);1);return return resultresult;14清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归过程的跟踪控制流返回控制流返回 main()函数时的栈框架函数时的栈框架15清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础递归信任与递归范型理解递归问题的原则理解递归问题的原则不分析复杂细节而仅考虑单一层次上的操作不分析复杂细节而仅考虑单一层次上的操作不
15、分析复杂细节而仅考虑单一层次上的操作不分析复杂细节而仅考虑单一层次上的操作不要跟踪递归调用的栈框架!不要跟踪递归调用的栈框架!不要跟踪递归调用的栈框架!不要跟踪递归调用的栈框架!基本递归假设基本递归假设只要递归调用时的参数比原始参数在某种程度上只要递归调用时的参数比原始参数在某种程度上只要递归调用时的参数比原始参数在某种程度上只要递归调用时的参数比原始参数在某种程度上更简单,则递归调用就一定能获得正确答案更简单,则递归调用就一定能获得正确答案更简单,则递归调用就一定能获得正确答案更简单,则递归调用就一定能获得正确答案递归心理学:这种简单递归调用一定正确工作的递归心理学:这种简单递归调用一定正确
16、工作的递归心理学:这种简单递归调用一定正确工作的递归心理学:这种简单递归调用一定正确工作的假设即为递归信任假设即为递归信任假设即为递归信任假设即为递归信任16清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础12.2 典型递归程序Hanoi 塔问题塔问题假设有三个分别命名为假设有三个分别命名为假设有三个分别命名为假设有三个分别命名为 X X、Y Y 和和和和 Z Z 的塔座,在塔的塔座,在塔的塔座,在塔的塔座,在塔座座座座 X X 上插有上插有上插有上插有 n n 个直径大小不同、依小到大分别编个直径大小不同、依小到大分别编个直径大小不同、依小
17、到大分别编个直径大小不同、依小到大分别编号为号为号为号为1 1,2 2,n n 的圆盘,如图所示。现要求将的圆盘,如图所示。现要求将的圆盘,如图所示。现要求将的圆盘,如图所示。现要求将X X 轴上的轴上的轴上的轴上的 n n 个圆盘移动到塔座个圆盘移动到塔座个圆盘移动到塔座个圆盘移动到塔座 Z Z 上并按相同顺序上并按相同顺序上并按相同顺序上并按相同顺序叠放,圆盘移动时必须遵循下述规则:叠放,圆盘移动时必须遵循下述规则:叠放,圆盘移动时必须遵循下述规则:叠放,圆盘移动时必须遵循下述规则:每次只能移动一个圆盘;每次只能移动一个圆盘;每次只能移动一个圆盘;每次只能移动一个圆盘;圆盘可以插在圆盘可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序设计 基础 课程 教学 PPTF
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内