永发信息网

vb 中一段关于子程序 可以帮忙解答么。。

答案:5  悬赏:0  手机版
解决时间 2021-03-02 09:18
  • 提问者网友:疯孩纸
  • 2021-03-02 03:40
vb 中一段关于子程序 可以帮忙解答么。。
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-03-02 04:28
Public Sub back(st As String)
If Len(st) > 1 Then
back (Right(st, Len(st) - 1))
End If
Picture1.Print Left(st, 1);
End Sub

back (Right(st, Len(st) - 1))
这句里面有一个递归调用,就是自身调用自身。如果参数st的长度大于1就再调用自身一次。因此,这里的执行应该是这样:
第1次调用 back ,st="abc“
到此处被身调用插入,又返回去执行 back (Right(st, Len(st) - 1)),

这是第二次调用 back,那这时,back的参数就是”bc",
长度仍然大于,又返回去执行back (Right(st, Len(st) - 1)),

这是第三次调用back,这时,back的参数就是"c“
这时长度等于1,不再调用自身,就执行到此函数结束,打印出 ”c",

然后又返回去,完成第二次调用中,后面的语句,打印出最左边的字符"b"

然后,又返回去,完成第一次调用中,后面的语句,打印出最左边的字符“a"

全部完成后,返回主程序,打印出s,即ABC
全部回答
  • 1楼网友:一把行者刀
  • 2021-03-02 08:34
这个是递归调用,很难理解的。
  • 2楼网友:猎心人
  • 2021-03-02 07:38
这是一个递归调用,back函数的功能就是反向输出字符串,其原理是将字符串去掉左边的一个字符,然后进行递归调用直到只剩一个字符,最后输出左边的字符。例如:
第一次调用,st="abc",第二次调用,st="bc",第三次调用,st="c",条件不符不再继续递归,这时运行下一句输出字符"c",然后函数返回执行第二交调用的下一句,输出字符"b",继续返回执行第一次调用的下一句输出字符"a"。函数执行完成后执行Print执行换行,然后将原来的"abc"打印出来。
关键要理解递归这个概念,也就是函数调用自身。
  • 3楼网友:冷風如刀
  • 2021-03-02 06:35
Private Sub Command1_Click()
    Dim s As String
    s = "ABC"
    back s
    Picture1.Print
    Picture1.Print s
End Sub
 
Public Sub back(st As String)
    If Len(st) > 1 Then '当字串长度大于1
        back (Right(st, Len(st) - 1)) '减掉前面一个字符后,递归调用
    End If
    Picture1.Print Left(st, 1); '显示左侧第一个字符
End Sub
'递归过程序如下'
'ABC
'back "ABC"
'   back "BC"
'       back "C"
'       pinrt "C"
'   print "B"
'print "A"
  • 4楼网友:毛毛
  • 2021-03-02 05:50

这是back过程的递归调用,实观将传入的字符串反向打印,但不改变原字符串的值。
下面跟踪一下back过程的流程:
把"ABC"传给形参st,也就是st = "ABC", 执行back("ABC")
因len("ABC") > 1所以递归执行back (Right("ABC", 3- 1)),Right取右起两个字符,即back("BC")
因len("BC") > 1 所以进一递归执行back (Right("BC", 2- 1)),Right取右起一个字符,即
back("C")
因len("C") 不大于1,所以执行picture1.Print Left(st,1);,这时st="C",Left取左起第一个字符还是"C",即Picture1.Print "C";
退出第二层递归,执行Picture1.Print Left("BC",1);,Left取"BC"左起第一个字符"B",即Picture1.Print "B";
退出第一层递归,执行Picture1.Print Left("ABC",1);,Left取"ABC"左起第一个字符"A",即Picture1.Print "A"; 所以结果为CBA.
Command1_Click中,Picture1.Print实验换行。
因为s的值并未发生变化,所以Picture1.Print s结果为ABC
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯