欢迎来到天天文库
浏览记录
ID:39727328
大小:364.50 KB
页数:40页
时间:2019-07-10
《递归与变量作用域》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、上节课复习知识要点1、过程的调用sub过程调用function过程调用调用其他模块中的过程2、参数的传递形参与实参按值传递参数按地址传递参数数组参数对象参数7.5递归过程(难点)1.递归的概念在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过程如下图:过程的嵌套调用如果在嵌套调用的过程中调用的是过程自身,这种过程也叫递归过程。递归是一种十分有用的程序设计技术。由于很多的数学模型和算法设计方法本来就是递归的。比如:求阶乘,求指数等。用递归过程描述它们比用非递归方
2、法简洁易读,可理解性好,算法的正确性证明也比较容易2.递归算法的结构递归算法的表达式通常由一个递归式和一个初始(或边界)条件式组成。例如:求N!1,当n=0或n=1时n!=n*(n-1)!,当n>1时递归式初始条件式裴波拉契数列1n=1F(n)=1n=2F(n-2)+F(n-1)n≥33.(重点)递归算法的执行过程分析—以阶乘为例PrivateFunctionfact(ByValnAsInteger)AsLongIfn=0Orn=1Thenfact=1Elsefact=n*fact(n-1)EndIfEndFu
3、nction初始条件式递归式调用阶乘的程序PrivateSubForm_Click()DimNasInteger,FasLongN=InputBox(“输入一个正整数”)F=fact(N)PrintN;”!=“;FEndSubFact(3)IfN=1thenFact=1ElseFact=3*Fact(3-1)EndIfEndFunctionFact(2)IfN=1thenFact=1ElseFact=2*Fact(2-1)EndIfEndFunctionFact(1)IfN=1thenFact=1ElseFac
4、t=1*Fact(1-1)EndIfEndFunctionFact(3)Fact(2)Fact(1)练一练:1PrivateFunctionf(ByValnAsInteger)AsLongIfn=0Orn=1Thenf=1Elsef=f(n-2)+f(n-1)EndIfPrintfEndFunction主调程序中:x=f(3)窗体打印几行,每行结果是什么?11123PrivateSubCommand1_Click()DimnAsIntegern=1Calldg(n)EndSubPrivateSubdg(nAsI
5、nteger)Ifn>3ThenExitSubElsedg(n+1)EndIfprintnEndSub321练一练:2课堂练习:题目:求数列前n项之和。数列表达式为0n=1F(n)=1n=22F(n-1)-F(n-2)n≥3PrivateFunctionf(nAsInteger)AsLongIfn=1Thenf=0ElseIfn=2Thenf=1Elsef=2*f(n-1)-f(n-2)EndIfEndFunctionPrivateSubCommand1_Click()Dimn%,i%,s%n=Val(Text
6、1.Text)Fori=1Tons=s+f(i)NextiText2.Text=Str(s)EndSub4.无限递归PrivateSubCommand1_Click()DimnAsIntegern=1Calldg(n)EndSubPrivateSubdg(nAsInteger)calldg(n+1)EndSubPrivateSubCommand1_Click()DimnAsIntegern=1Calldg(n)EndSubPrivateSubdg(nAsInteger)Ifn>10ThenExitSubElse
7、dg(n+1)EndIfEndSubPrivateSubCommand1_Click()DimnAsIntegern=1Calldg(n)EndSubPrivateSubdg(nAsInteger)printnIfn>3ThenExitSubElsedg(n+1)EndIfEndSubPrivateSubCommand1_Click()DimnAsIntegern=1Calldg(n)EndSubPrivateSubdg(nAsInteger)Ifn>3ThenExitSubElsedg(n+1)EndIfpr
8、intnEndSub递归真题实例OptionExplicitPrivateSubForm_Click()DimaAsIntegera=2:Callsub1(a)EndSubPrivateSubsub1(xAsInteger)x=x*2+1Ifx<10ThenCallsub1(x)EndIfx=x*2+1:PrintxEndSub2347PrivateSubCommand1_Click(
此文档下载收益归作者所有