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呢?
展开
 我来答
Rainbow_Route
2007-08-05 · TA获得超过646个赞
知道小有建树答主
回答量:689
采纳率:0%
帮助的人:0
展开全部
呵呵 有意思。
我来一行行把它解剖了。

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,所以就有两次输出了。
百度网友122d3c8b1
2007-08-05 · TA获得超过520个赞
知道小有建树答主
回答量:1059
采纳率:0%
帮助的人:0
展开全部
这是一个递归函数在递归前操作x = x * 2 + 1 进行递归后每返回一次又执行了后面的x = x * 2 + 1 所以,结果会是2347了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shuoyizhi
2007-08-05 · TA获得超过2596个赞
知道小有建树答主
回答量:1519
采纳率:0%
帮助的人:688万
展开全部
我也不清楚.......... 应该是



我也想知道是这样不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
binjly
2007-08-05 · TA获得超过3064个赞
知道大有可为答主
回答量:2017
采纳率:0%
帮助的人:2885万
展开全部
应该是23的啊!
奇怪了
你按F8一条一条的运行,然后自己跟踪数据看下(鼠标移到变量上就可以看到数据了)
我这边没VB,不能帮你看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
everisme
2007-08-05
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
是23 47 我试了.你在好好想想,我就是提问那个.一楼的说的我也不怎么明白,返回后已经是23了为什么还要继续返回呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式