VB课程-常用算法.ppt

上传人:桔**** 文档编号:570656970 上传时间:2024-08-05 格式:PPT 页数:31 大小:938KB
返回 下载 相关 举报
VB课程-常用算法.ppt_第1页
第1页 / 共31页
VB课程-常用算法.ppt_第2页
第2页 / 共31页
VB课程-常用算法.ppt_第3页
第3页 / 共31页
VB课程-常用算法.ppt_第4页
第4页 / 共31页
VB课程-常用算法.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《VB课程-常用算法.ppt》由会员分享,可在线阅读,更多相关《VB课程-常用算法.ppt(31页珍藏版)》请在金锄头文库上搜索。

1、第三讲:常用算法(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 一、计数、求和、求阶乘等简单算法此类问题都要使用循环,要注意根据问题确定此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。来表示计数、和、阶乘的变量的初值。(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 二、用辗转相除法求两自然数m,n的最大公约数和最小公倍数。分析:分析:(1)(1)对于已知两数对于已知两数mm,n n,使得使得mnmn;(2) m(2) m除以除以n n得余数得余数r r;(3

2、)(3)若若r=0r=0,则,则n n为最大公约数结束;否则执行为最大公约数结束;否则执行(4)(4);(4)(4)mm n n,n n r r,再重复执行再重复执行(2)(2)。 设输入设输入m=28,n=20m=28,n=20 循环循环 m n r赋好初值时:赋好初值时:28 20 8第一次结束:第一次结束:20 8 4第二次结束:第二次结束: 8 4 0 If m n Then t = m: m = n: n = t r=m mod n Do While (r 0) m=n n=r r= m mod n Loop Print 最大公约数最大公约数=, n(一)VB入门 授课教师:叶夏 计

3、算机应用基础及VBASIC 三、判断素数n n基本思想:基本思想: 把把mm作作为为被被除除数数,将将22IntInt( (SqrSqr(m)(m)作作为为除除数数,如如果果都都除除不不尽尽,mm就就是是素素数数,否否则则就就不不是是。可用以下程序段实现可用以下程序段实现n nm =m =valval( ( InputBox InputBox(请输入一个数请输入一个数请输入一个数请输入一个数)For i=2 ToFor i=2 To int int( (sqrsqr(m)(m) If m Mod i = 0 Then Exit For If m Mod i = 0 Then Exit ForN

4、ext iNext iIf i If i int int( (sqrsqr(m) Then(m) Then Print Print 该数是素数该数是素数该数是素数该数是素数 ElseElse Print Print 该数不是素数该数不是素数该数不是素数该数不是素数 End IfEnd If? 如何将其写成如何将其写成一函数。若为素一函数。若为素数返回数返回TrueTrue,不不是返回是返回FalseFalse。(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 例:例:例:例:验证哥德巴赫猜想(任意一个大于等于验证哥德巴赫猜想(任意一个大于等于验证哥德巴赫猜想(任意一个大于等于验证哥

5、德巴赫猜想(任意一个大于等于6 6的偶数都的偶数都的偶数都的偶数都可以分解为两个素数之和)可以分解为两个素数之和)可以分解为两个素数之和)可以分解为两个素数之和) 基本思想:基本思想:基本思想:基本思想:N N N N为大于等于为大于等于为大于等于为大于等于6 6 6 6的任一偶数,可分解为的任一偶数,可分解为的任一偶数,可分解为的任一偶数,可分解为n1n1n1n1和和和和n2n2n2n2两个数,分别检查两个数,分别检查两个数,分别检查两个数,分别检查n1n1n1n1和和和和n2n2n2n2是否为素数,如都是,则为是否为素数,如都是,则为是否为素数,如都是,则为是否为素数,如都是,则为一组解。

6、如一组解。如一组解。如一组解。如n1n1n1n1不是素数,就不必再检查不是素数,就不必再检查不是素数,就不必再检查不是素数,就不必再检查n2n2n2n2是否素数。先是否素数。先是否素数。先是否素数。先从从从从n1=3n1=3n1=3n1=3开始,检验开始,检验开始,检验开始,检验n1n1n1n1和和和和n2n2n2n2(n2=N-n1n2=N-n1n2=N-n1n2=N-n1)是否素数。然后是否素数。然后是否素数。然后是否素数。然后使使使使n1=n1+2,n1=n1+2,n1=n1+2,n1=n1+2,再检验再检验再检验再检验n1n1n1n1、n2n2n2n2是否素数,是否素数,是否素数,是否

7、素数,直到直到直到直到n1=N/2n1=N/2n1=N/2n1=N/2为止为止为止为止。Private Function Prime( m as Integer) As BooleanPrivate Function Prime( m as Integer) As Boolean Dim i% Dim i% Prime=True Prime=True For i=2 To For i=2 To int int( (sqrsqr(m)(m) If m Mod i = 0 Then Prime=False: Exit For If m Mod i = 0 Then Prime=False: Exi

8、t For Next i Next iEnd FunctionEnd Function(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 验证哥德巴验证哥德巴验证哥德巴验证哥德巴赫猜想赫猜想赫猜想赫猜想 Dim n%,n1%,n2% Dim n%,n1%,n2% n=Val( n=Val(InputBoxInputBox(输入大于输入大于输入大于输入大于6 6的正整数的正整数的正整数的正整数) For n1=3 to n2 step 2For n1=3 to n2 step 2 n2=n-n1 n2=n-n1 If If prime(n1)prime(n1) Then Then If

9、 If prime(n2)prime(n2) then then Print n & = & n1 & + & n2 Print n & = & n1 & + & n2 Exit For Exit For End if End if End if End ifNext n1Next n1Private Function Prime( m%) As Boolean Dim i% Prime=True For i=2 To int(sqr(m) If m Mod i = 0 Then Prime=False: Exit For End if Next iEnd Function(一)VB入门 授课

10、教师:叶夏 计算机应用基础及VBASIC 四、数组排序 对已知存放在数组中的对已知存放在数组中的n n个数。个数。(1)(1)选择法排序选择法排序算法思想:算法思想: 1 1)对对有有n n个个数数的的序序列列(存存放放在在数数组组a(n)a(n)中中),从从中中选选出出最最小小(升升序序)或或最最大大(降降序序)的数,与第的数,与第1 1个数交换位置;个数交换位置;2 2)除除第第1 1 个个数数外外,其其余余n-1n-1个个数数中中选选最最小小或或最最大大的的数数,与与第第2 2个数交换位置;个数交换位置;3 3)依依次次类类推推,选选择择了了n-1n-1次次后后,这个数列已按升序排列。这

11、个数列已按升序排列。原始数据:8 6 9 3 2 7第一轮后:2 6 9 3 8 7第二轮后:2 3 9 6 8 7第三轮后:2 3 6 9 8 7第四轮后:2 3 6 7 8 9第五轮后:2 3 6 7 8 9(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 选择法排序(升序)的VB程序For i = 1 To n - 1For i = 1 To n - 1 imin imin = i = i For j = i + 1 To n For j = i + 1 To n If a( If a(iminimin) a(j) Then) a(j) Then imin imin = j

12、= j Next j Next j temp = a(i) temp = a(i) a(i) = a( a(i) = a(iminimin) ) a( a(iminimin) = temp) = tempNext iNext i(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC (2 2)冒泡法排序(递增)冒泡法排序(递增)冒泡法排序(递增)冒泡法排序(递增) 算法思想:算法思想:( (将相邻两个数比较,小的调到前头将相邻两个数比较,小的调到前头) )1 1)有有n n个个数数(存存放放在在数数组组a(n)a(n)中中),第第一一趟趟将将每每相相邻邻两两个个数数比比较较,小小的的调调

13、到到前前头头,经经n-1n-1次次两两两两相相邻邻比比较较后后,最最大大的的数数已已“ “沉沉底底” ”,放在最后一个位置,小数上升,放在最后一个位置,小数上升“ “浮起浮起” ”;2 2)第第二二趟趟对对余余下下的的n-1n-1个个数数(最最大大的的数数已已“ “沉沉底底” ”)按按上上法法比比较,经较,经n-2n-2次两两相邻比较后得次大的数;次两两相邻比较后得次大的数; 3 3)依依次次类类推推,n n个个数数共共进进行行n-1n-1趟趟比比较较,在在第第j j趟趟中中要要进进行行n-jn-j次次两两比较。两两比较。8693268932689326839268329 6832963829

14、63289 (一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 冒泡法排序(升序)的VB程序:For i = 1 To n - 1For i = 1 To n - 1 For j = 1 To n-i For j = 1 To n-i If a(j) a(j+1) Then If a(j) a(j+1) Then temp=a(j) temp=a(j) a(j)=a(j+1) a(j)=a(j+1) a(j+1)=temp a(j+1)=temp End if End if Next j Next jNext iNext i? 编写一个数组编写一个数组排序的子过程排序的子过程(一)V

15、B入门 授课教师:叶夏 计算机应用基础及VBASIC 例:删除数组中相同的例:删除数组中相同的例:删除数组中相同的例:删除数组中相同的元素元素元素元素Public Sub del(a() As Integer)Public Sub del(a() As Integer) i = i = LBound LBound(a)(a) Do While i Do While i UBound UBound(a)(a) j = i + 1 j = i + 1 Do Do While j =While j = UBound UBound(a)(a) If a(i) = a(j) Then If a(i) =

16、 a(j) Then n = n = UBound UBound(a)(a) For k = j + 1 To n For k = j + 1 To n a(k - 1) = a(k)a(k - 1) = a(k) Next k Next k ReDimReDim Preserve a(n - 1) Preserve a(n - 1) Else Else j = j + 1 j = j + 1 End If End If Loop Loop i = i + 1i = i + 1 Loop LoopEnd SubEnd Sub1、a) While j=Ubound(a) b) While jUb

17、ound(a) c) Until jLbound(a)2、a) a(k)=a(k+1) b) a(k-1)=a(k) c) a(k)=a(k-1) d) a(k+1)=a(k)3、a)ReDim Preserve a(n) b)ReDim a(n+1) c)ReDim Preserve a(n+1) d)ReDim Preserve a(n-1)4、a)i=i+1 b)i=i-1 c)j=j+1 d)j=j-1_(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 五、查 找1 1、顺序查找法、顺序查找法、顺序查找法、顺序查找法(在一列数中查找某数(在一列数中查找某数(在一列数中查找某

18、数(在一列数中查找某数x x) 算法思想:一列数放在数组算法思想:一列数放在数组a(1)-a(n)a(1)-a(n)中,待查找中,待查找的数放在的数放在x x 中,把中,把x x与与a a数组中的元素从头到尾一一进数组中的元素从头到尾一一进行比较查找。行比较查找。Option Base 1Option Base 1Private Function Find( a( ) As Single,x!) As IntegerPrivate Function Find( a( ) As Single,x!) As Integer Dim n%,p% Dim n%,p% Find=0 Find=0 n=

19、n=UboundUbound( a )( a )For p=1 to nFor p=1 to n If x=a( p) Then Find=p : exit for If x=a( p) Then Find=p : exit forNext pNext pEnd FunctionEnd Function (一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 2 2、折半查找法、折半查找法(只能对有序数列进行查找)(只能对有序数列进行查找)算算法法思思想想:n n个个有有序序数数存存放放在在数数组组a(1) a(1) a(n)a(n)中中,要要查查找找的的数数为为x x。变变量量top,

20、top,botbot,mid ,mid 分分别别表表示示查查找找范范围围的的顶顶部、底部和中间,部、底部和中间,mid=(top+mid=(top+botbot)2)2,若:若:(1 1)x=a(mid)x=a(mid),则已找到退出,否则进行下面的判断;则已找到退出,否则进行下面的判断;(2 2)xa(mid)xa(mid)xa(mid),x x必定落在必定落在mid+1mid+1和和botbot的范围之内,的范围之内, top=mid+1top=mid+1;(4 4)在在确确定定了了新新的的查查找找范范围围后后,重重复复进进行行以以上上比比较较,直到找到或者直到找到或者botbot=top

21、=top。(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC find = False find = False 判断是否找到的逻辑变量判断是否找到的逻辑变量判断是否找到的逻辑变量判断是否找到的逻辑变量 top = 1top = 1botbot = n n = n n为数组下标的上界为数组下标的上界为数组下标的上界为数组下标的上界Do While Do While botbot = top And Not find = top And Not find mid = (top + mid = (top + bot bot) / 2) / 2 If x = a(mid) Then If

22、x = a(mid) Then find = True find = True Print the position is ; mid Print the position is ; mid ElseIf ElseIf x a(mid) Then x a(p) and pa(p) and p a(row, Column) Then If a(i, j) a(row, Column) Then If a(i, j) a(row, Column) Then If a(i, j) a(row, Column) Then row = i row = i row = i row = i Column =

23、 j Column = j Column = j Column = j End If End If End If End If Next j Next j Next j Next jNext iNext iNext iNext iPrint Print Print Print 最大元素是最大元素是最大元素是最大元素是; ; ; ; a(row, Column); a(row, Column); a(row, Column); a(row, Column); Print “Print “Print “Print “,在第在第在第在第 & & & & row & row & row & row &

24、 行行行行, ; , ; , ; , ; Print Print Print Print 第第第第 & & & & Column & Column & Column & Column & 列列列列 (一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 4 4、矩阵转置、矩阵转置、矩阵转置、矩阵转置设有二维数组设有二维数组a(5,5)a(5,5),要对它实现转置,可用下要对它实现转置,可用下面两种方式:面两种方式:Fori=1to4Fori=2to5Fori=1to4Fori=2to5Forj=i+1to5Forj=i+1to5Forj=1toi-1Forj=1toi-1t=a(i,j)

25、t=a(i,j) t=a(i,j)t=a(i,j)a(i,j)=a(j,i)a(i,j)=a(j,i)a(i,j)=a(j,i)a(i,j)=a(j,i)a(j,i)=ta(j,i)=ta(j,i)=ta(j,i)=tNextjNextjNextjNextjNextiNextiNextiNextia(1,1a(1,1) )a(1,2a(1,2) )a(1,3a(1,3) )a(1,4a(1,4) )a(1,5a(1,5) )a(2,1a(2,1) )a(2,2a(2,2) )a(2,3a(2,3) )a(2,4a(2,4) )a(2,5a(2,5) )a(3,1a(3,1) )a(3,2a(3

26、,2) )a(3,3a(3,3) )a(3,4a(3,4) )a(4,5a(4,5) )a(4,1a(4,1) )a(4,2a(4,2) )a(4,3a(4,3) )a(4,4a(4,4) )a(4,5a(4,5) )a(5,1a(5,1) )a(5,2a(5,2) )a(5,3a(5,3) )a(5,4a(5,4) )a(5,5a(5,5) )a(1,1a(1,1) )a(1,2a(1,2) )a(1,3a(1,3) )a(1,4a(1,4) )a(1,5a(1,5) )a(2,1a(2,1) )a(2,2a(2,2) )a(2,3a(2,3) )a(2,4a(2,4) )a(2,5a(2,

27、5) )a(3,1a(3,1) )a(3,2a(3,2) )a(3,3a(3,3) )a(3,4a(3,4) )a(4,5a(4,5) )a(4,1a(4,1) )a(4,2a(4,2) )a(4,3a(4,3) )a(4,4a(4,4) )a(4,5a(4,5) )a(5,1a(5,1) )a(5,2a(5,2) )a(5,3a(5,3) )a(5,4a(5,4) )a(5,5a(5,5) )(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 八、迭 代 法算法思想:算法思想: 对于一个问题的求解对于一个问题的求解x x,可由给定可由给定的一个初值的一个初值x0x0,得到一个新的值

28、得到一个新的值x1x1,这个新值这个新值x1x1比比初值初值x0x0更接近要求的值更接近要求的值x x;再以新值作为初值,即:再以新值作为初值,即:x1x0,x1x0,重新按原来的方法求重新按原来的方法求x1,x1,重复这一过和直到重复这一过和直到| |x1-x0|(x1-x0|(某一给定的精度某一给定的精度) )。此时可将。此时可将x1x1作为问作为问题的解。题的解。例:计算的近似值(精度为0.00001),公式为:例:用迭代法求平方根。 迭代公式为:(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 九、九、数制转换数制转换将一个十进制整数将一个十进制整数mm转换成转换成 r (

29、2r (216)16)进制字符串。进制字符串。方法:将方法:将mm不断除不断除 r r 取余数,直到商为零,以反序得到结果。取余数,直到商为零,以反序得到结果。Private Function TrDec(idec%, ibase%) As String Dim strDecR$, iDecR%End Function strDecR = TrDec = strDecR DoLoop While idec 0 iDecR = idec Mod ibase strDecR = iDecR & strDecR idec = idec ibase If iDecR = 10 Then strDecR

30、 = Chr$(65 + iDecR - 10) & strDecR Else End If?小数的转换?小数的转换(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 十、字符串的一般处理1.1.简单加密和解密简单加密和解密加密的思想加密的思想将每个字母将每个字母C C加(或减)一序数加(或减)一序数K K,即用它后的第即用它后的第K K个字母代个字母代替,变换式公式:替,变换式公式: c=c=chrchr( (AscAsc(c)+k)(c)+k)例如序数例如序数k k为为5 5,这时,这时 “ “A”A”“F”“F”, “ “a”a”“f”“f”,“ “B”B”“G” “G” 当加

31、序数后的字母超过当加序数后的字母超过“ “Z Z” ”或或“ “z z” ”则则 c=c=ChrChr( (AscAsc(c)+k -26)(c)+k -26)例如:例如:You are good You are good Dtz fwj ltti Dtz fwj ltti 解解密为加密的逆过程密为加密的逆过程将每个字母将每个字母C C减(或加)一序数减(或加)一序数K K,即即 c=c=chrchr( (AscAsc(c)-k),(c)-k),例如序数例如序数k k为为5 5,这时,这时 “ “Z”Z”“U”“U”, “ “z”z”“u”“u”,“ “Y”Y”“T” “T” 当加序数后的字母

32、小于当加序数后的字母小于“ “A A” ”或或“ “a a” ”则则 c=c=ChrChr( (AscAsc(c)-k +26)(c)-k +26)(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC Private FunctionPrivate Function Pwp Pwp( (strIstrI as string, k as integer) as string, k as integer) As StringAs String Dim i%, Dim i%, nL nL%,%, iA iA%,%, strp strp$,$, strT strT$ $ i = 1: i =

33、1: strp strp = = nL nL = Len( = Len(RTrimRTrim( (strIstrI) For I =1 to For I =1 to nL nL strT strT = Mid$( = Mid$(strIstrI, i, 1) , i, 1) 取第取第取第取第i i个字符个字符个字符个字符 If (If (strTstrT = A And = A And strT strT = Z) Then Asc Asc(Z) Then(Z) Then iA iA = = iA iA - 26 - 26 strp strp = = strp strp + + Chr Chr

34、$($(iAiA) ) ElseIf ElseIf ( (strTstrT = a And = a And strT strT = z) Then Asc Asc(z) Then(z) Then iA iA = = iA iA - 26 - 26 strpstrp = = strp strp + + Chr Chr$($(iAiA) ) Else Else strp strp = = strp strp + + strT strT End IfEnd If Next i Next i pwp pwp=strpstrpEnd FunctionEnd Function?用用select语句实现语句

35、实现解密功能解密功能(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 2、统计文本单词的个数算法思路:算法思路: (1 1)从文本(字符串)的左边开始,取)从文本(字符串)的左边开始,取出一个字符;设逻辑量出一个字符;设逻辑量WTWT表示是否准备下一个新表示是否准备下一个新单词的开始单词的开始,初值设为初值设为TrueTrue (2 2)若所取字符不是若所取字符不是“ “空格空格” ”,“ “逗号逗号” ”,“ “分号分号” ”或或“ “感叹号感叹号” ”等单词的分隔符,再判断等单词的分隔符,再判断WTWT是否是否为为TrueTrue,若,若WTWT为为TrueTrue则表是新单词

36、的开始,让单则表是新单词的开始,让单词数词数NwNw= =NwNw+1+1,让,让WT=False;WT=False; (3 3)若所取字符是若所取字符是“ “空格空格” ”,“ “逗号逗号” ”,“ “分号分号” ”或或“ “感叹号感叹号” ”等单词的分隔符,等单词的分隔符, 则表示当前单词则表示当前单词结束,准备下一个单词开始结束,准备下一个单词开始,让,让WT=True;WT=True; (4) (4) 再依次取下一个字符,重得(再依次取下一个字符,重得(2 2)(3)(3)直到文本直到文本结束。结束。(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC NwNw = 0: Wt

37、 = True = 0: Wt = TruenLnL = Len( = Len(RTrimRTrim( (stristri)For i = 1 ToFor i = 1 To nL nL strT strT = Mid$( = Mid$(stristri, i, 1), i, 1) Select Case Select Case strT strT Case , , ;, ! Case , , ;, ! Wt = True Wt = True Case Else Case Else If Wt Then If Wt Then Nw Nw = Nw Nw + + 1 1 Wt = False Wt

38、 = False End If End If End Select End SelectNext iNext iPrint Print 单词数为:单词数为:单词数为:单词数为:, , NwNwNw= 0Yes, it is. WtTrueFalseTrueFalseTrueFalse1 2 3单词数加一的条件:单词数加一的条件:1 1、遇到非空格和标、遇到非空格和标点的字符点的字符2 2、WtWt为为TrueTrue True(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 如果单词仅以空格作为分隔符:如果单词仅以空格作为分隔符:方法:方法: (1 1)查找空格,若找到第一个空格的

39、位置)查找空格,若找到第一个空格的位置n0n0,则单词数加则单词数加1 1(2 2)从原字符串中去除第一个单词及余下字符串的首尾空格)从原字符串中去除第一个单词及余下字符串的首尾空格(3 3)重复()重复(1 1)()(2 2)直到)直到n=0n=0为止为止。NwNw = 0 = 0strIstrI = Trim( = Trim(strIstrI)If Len(If Len(strIstrI)0 then)0 then nw nw=1=1Do Whlie n0LoopN=Instr(strI, ) nw=nw+1 strI = Trim(Mid$(strI, n+1) n=Instr(strI

40、, )Print 单词数为:单词数为:, NwThis is a book5(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 十一、穷举法穷举法(又称穷举法(又称“ “枚举法枚举法” ”)的基本思想是:)的基本思想是:一一一一列举各种可能的情况,并判断哪一种可能是符列举各种可能的情况,并判断哪一种可能是符合要求的解,这是一种合要求的解,这是一种“ “在没有其它办法的情在没有其它办法的情况的方法况的方法” ”,是一种最,是一种最“ “笨笨” ”的方法,然而对的方法,然而对一些无法用解析法求解的问题往往能奏效,常一些无法用解析法求解的问题往往能奏效,常常采用循环来处理穷举问题。常采用循

41、环来处理穷举问题。例:例: 将一张面值为将一张面值为100100元的人民币等值换成元的人民币等值换成100100张张5 5元、元、1 1元和元和0.50.5元的零钞,要求每种零钞不元的零钞,要求每种零钞不少于少于1 1张,问有哪几种组合张,问有哪几种组合? ?(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 十二 递归1.1.递归的概念:递归的概念: 用自身的结构来描述自身就称为用自身的结构来描述自身就称为“ “递归递归” ”。例。例对阶乘的定义:对阶乘的定义:2. 2. 递归过程递归过程 过程在自身定义的内部调用自己过程在自身定义的内部调用自己(一)VB入门 授课教师:叶夏 计算

42、机应用基础及VBASIC 编编facfac(n)=n! (n)=n! 的递归函数的递归函数 FunctionFunction fac fac(n As Integer) As Integer(n As Integer) As Integer If n = 1 Then If n = 1 Then fac fac = 1 = 1 Else Else fac fac = n * = n * fac fac(n - 1)(n - 1) End If End If End Function End Function递推回归(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC n=3Functi

43、on fac%(n%) If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd Function n=2Function fac%(n%) If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd Function n=1Function fac%(n%) If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd FunctionPrivate Sub Command1_Click() Dim n%,x% n = Inp

44、utBox(“input”) 运行时输入运行时输入3 x=fac(n) print xEnd Sub126(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC 在递归处理中,用栈来实现。栈中存放形参、局部变在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。量、返回地址。n n递归算法设计简单,但消耗的机时和占据的内存空递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。间比非递归大。思考:思考:若上述若上述facfac函数中没有这句语句:函数中没有这句语句: If n = 1 ThenIf n = 1 Then fac fac = 1 = 1即仅有语句:即仅有语句:fa

45、cfac = n * = n * fac fac(n - 1) (n - 1) 程序运行将造成何结果?程序运行将造成何结果?由此可见构成递归的条件:由此可见构成递归的条件: 递归结束条件及结束时的值;递归结束条件及结束时的值; 能用递归形式表示,并且递归向终止条件发展能用递归形式表示,并且递归向终止条件发展。(一)VB入门 授课教师:叶夏 计算机应用基础及VBASIC Private Sub Form_clickPrivate Sub Form_click()() Print fun(6) Print fun(6)End SubEnd SubFunction fun(n%) As String If n = 0 Then fun = Hello Else If n Mod 2 = 0 Then fun = fun(n 2) & girl Else fun = fun(n 2) & boy End If End IfEnd Functionfun(6)=fun(3) & “ girl”fun(3)=fun(1) & “ boy”fun(1)=fun(0) & “ boy”fun(0)=“Hello”=“Hello boy”=“Hello boy boy”=“Hello boy boy girl”Hello boy boy girl

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号