
VB 函数问题
OptionExplicitPrivateSubsub1(xAsInteger)x=x*2+1Ifx<10ThenCallsub1(x)EndIfx=x*2+1Print...
Option Explicit
Private Sub sub1(x As Integer)
x = x * 2 + 1
If x < 10 Then
Call sub1(x)
End If
x = x * 2 + 1
Print x
End Sub
Private Sub form_click()
Dim a As Integer
a = 2
Call sub1(a)
End Sub
结果为什么是 23 47 为什么不是23呢? 展开
Private Sub sub1(x As Integer)
x = x * 2 + 1
If x < 10 Then
Call sub1(x)
End If
x = x * 2 + 1
Print x
End Sub
Private Sub form_click()
Dim a As Integer
a = 2
Call sub1(a)
End Sub
结果为什么是 23 47 为什么不是23呢? 展开
5个回答
展开全部
呵呵 有意思。
我来一行行把它解剖了。
Private Sub sub1(x As Integer)
[Start]x = x * 2 + 1 '第一次改x的值,x=5,x<10
If x < 10 Then
Call sub1(x) '第二次调用sub1,返回到[Start]行
End If '同时第二次改x的值,x=11,x>10不再调用sub1
[Second]x = x * 2 + 1 '第三次改x的值,x=23
Print x '第一次输出x的值,x=23
End Sub '结束第一次sub1的调用,并返回到行[Second],并接着改x的值,第二次输出x=47
Private Sub form_click()
Dim a As Integer
a = 2
Call sub1(a) '第一次调用sub1
End Sub
其实最主要的,是调用了两次sub1,所以就有两次输出了。
我来一行行把它解剖了。
Private Sub sub1(x As Integer)
[Start]x = x * 2 + 1 '第一次改x的值,x=5,x<10
If x < 10 Then
Call sub1(x) '第二次调用sub1,返回到[Start]行
End If '同时第二次改x的值,x=11,x>10不再调用sub1
[Second]x = x * 2 + 1 '第三次改x的值,x=23
Print x '第一次输出x的值,x=23
End Sub '结束第一次sub1的调用,并返回到行[Second],并接着改x的值,第二次输出x=47
Private Sub form_click()
Dim a As Integer
a = 2
Call sub1(a) '第一次调用sub1
End Sub
其实最主要的,是调用了两次sub1,所以就有两次输出了。
展开全部
这是一个递归函数在递归前操作x = x * 2 + 1 进行递归后每返回一次又执行了后面的x = x * 2 + 1 所以,结果会是2347了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是23的啊!
奇怪了
你按F8一条一条的运行,然后自己跟踪数据看下(鼠标移到变量上就可以看到数据了)
我这边没VB,不能帮你看
奇怪了
你按F8一条一条的运行,然后自己跟踪数据看下(鼠标移到变量上就可以看到数据了)
我这边没VB,不能帮你看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是23 47 我试了.你在好好想想,我就是提问那个.一楼的说的我也不怎么明白,返回后已经是23了为什么还要继续返回呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询