C语言课件第9部分递归程序设计.ppt
《C语言课件第9部分递归程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言课件第9部分递归程序设计.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九部分递归程序设计技术学习程序设计需要注意规律性的东西北京交通大学计算机与信息技术学院 教师:林友芳本章内容n递归与循环n递归函数的执行过程n递归函数效率北京交通大学计算机与信息技术学院 教师:林友芳循环与递归n循环程序n用于描述需要重复进行计算n高级语言里,也常见用递归来实现重复的计算。n递归recursion,recursivealgorithmn函数或过程调用自身nC语言允许递归,可以在函数内调用自身,常常使程序更简单清晰。北京交通大学计算机与信息技术学院 教师:林友芳1.阶乘和乘幂n例:定义计算整数阶乘的函数n12(n-1)nn本例中,乘的次数依赖于n,计算所需的次数定义时无法确定。
2、n这是一种典型循环情况n计算“次数”依赖某些参数的值。北京交通大学计算机与信息技术学院 教师:林友芳程序longfact1(longn)longfac,i;for(fac=1,i=1;i=n;i+)fac*=i;returnfac;北京交通大学计算机与信息技术学院 教师:林友芳阶乘函数的精确定义n是一种递归定义的形式n要解决规模为n的问题,要先解决规模为n-1的子问题,依此类推。n如果高级语言允许递归定义函数,就可以直接翻译为程序。nC允许递归定义n在函数定义内直接或间接地调用被定义函数本身。北京交通大学计算机与信息技术学院 教师:林友芳写成递归函数longfact(longn)returnn
3、=0?1:n*fact(n-1);longfact(longn)if(n=1)return1;returnn*fact(n-1);北京交通大学计算机与信息技术学院 教师:林友芳longfact(1)if(1=1)return1;return1*fact(1-1);longfact(2)if(2=1)return1;return2*fact(2-1);longfact(3)if(3=1)return1;return3*fact(3-1);main()printf(“%d”,fact(3);蓝线:函数调用线路黄线:函数内部执行路线红线:函数执行结束返回主调函数的路线longfact(longn)i
4、f(n1)n1,1,2,3,5,8,13,21,34,65,99,北京交通大学计算机与信息技术学院 教师:林友芳用递归程序实现longfib(intn)returnn2?1:fib(n-1)+fib(n-2);问题分析:这个程序好不好?问题分析:这个程序好不好?一方面,很好!程序与数学定义的关系很清晰,一方面,很好!程序与数学定义的关系很清晰,正确性容易确认,定义易读易理解正确性容易确认,定义易读易理解北京交通大学计算机与信息技术学院 教师:林友芳例fib(5)调用过程fib(5)fib(4)fib(3)fib(3)fib(2)fib(2)fib(1)fib(1)fib(0)fib(1)fib
5、(0)fib(2)fib(1)fib(1)fib(0)存在什么问题?北京交通大学计算机与信息技术学院 教师:林友芳问题n存在大量重复计算,参数越大重复计算越多。n有关系吗?n随着参数增大,计算中重复增长迅速,最快的微机上一分钟大约可以算出fib(45)n参数加1,fib多用近一倍时间(指数增长)。最快的微机一小时算不出fib(55),算fib(100)要数万年n计算需要时间,复杂计算需要很长时间。这是计算机的本质特征和弱点。说明它不是万能,有些事情“不能”做。北京交通大学计算机与信息技术学院 教师:林友芳计算复杂度n人们发现了许多实际问题,理论上说可用计算机解决(可写出计算它的程序),但对规模
6、大的情况(“大的参数n”),人类永远等不到计算完成。n这时能说问题解决了吗?n计算中有一大类问题被称为的“难解问题”,其中有许多很实际的问题,如规划、调度、优化等。n解决这些问题,需要理论和实际技术的研究。n另外,对于许多问题的实用的有效算法,有极大的理论价值和实际价值。n计算复杂性,难解问题,“P=NP?”问题。北京交通大学计算机与信息技术学院 教师:林友芳阅读材料:NP问题nAproblemisassignedtotheNP(nondeterministicpolynomialtime)classifitissolvableinpolynomialtimebyanondeterminist
7、ic Turing machine.nAP-problem(whosesolutiontimeisboundedbyapolynomial)isalwaysalsoNP.IfaproblemisknowntobeNP,andasolutiontotheproblemissomehowknown,thendemonstratingthecorrectnessofthesolutioncanalwaysbereducedtoasingleP(polynomialtime)verification.IfPandNParenotequivalent,thenthesolutionofNP-proble
8、msrequires(intheworstcase)anexhaustive search.nLinear programming,longknowntobeNPandthoughtnottobeP,wasshowntobePbyL.Khachianin1979.Itisanimportantunsolved problemtodetermineifallapparentlyNPproblemsareactuallyP.nAproblemissaidtobeNP-hardifanalgorithmforsolvingitcanbetranslatedintooneforsolvinganyot
9、herNP-problem.ItismucheasiertoshowthataproblemisNPthantoshowthatitisNP-hard.AproblemwhichisbothNPandNP-hardiscalledanNP-complete problem.北京交通大学计算机与信息技术学院 教师:林友芳为计算过程计时n统计程序或程序片段的计算时间有助于理解程序性质。许多语言或系统都提供了内部计时功能。n有关函数在time.h,统计程序时间时程序头部应写n#includen在程序里计时,通常写表达式nclock()/CLOCKS_PER_SECn得到从程序开始到表达式求值时所经历
10、的秒数。北京交通大学计算机与信息技术学院 教师:林友芳确定计算确定计算fib(45)fib(45)所需要的时间的程序所需要的时间的程序#include#includelongfib(intn)returnn=1?1:fib(n-1)+fib(n-2);intmain()doublex;x=clock()/CLOCKS_PER_SEC;fib(45);x=clock()/CLOCKS_PER_SEC-x;printf(Timingfib(45):%f.n,x);return0;北京交通大学计算机与信息技术学院 教师:林友芳Fibonacci数的迭代计算nFibonacci数的递推计算,易见n1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 部分 递归 程序设计
限制150内