+ -
当前位置:首页 → 问答吧 → 为什么结果有两行??

为什么结果有两行??

时间:2011-07-28

来源:互联网

Option Explicit

Private Sub Command1_Click()
Dim A As Integer
A = 2
Call Sub1(A)
End Sub

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
我分析的结果是23
但是运行结果是23和47
请问47是怎么来的??

作者: QQ472152323   发布时间: 2011-07-28

做递归需要好好理一下思路就知道了。

作者: dingyanwei   发布时间: 2011-07-28

Sub(X) -> X=2 ->X=5 ->Sub(X) ->X=5 ->X=11 -> X=23(输出)->返回到endif ->执行X=X*2+1(47)->输出(47)

作者: c_cyd2008   发布时间: 2011-07-28

注意递归包括递推和回归,你只记得递推,忘了回归了

作者: c_cyd2008   发布时间: 2011-07-28

A=2,调用Sub1中,X=X*2+1=5,因为5<10,所以第二次进入Sub1,X=X*2+1=11,然后X=X*2+1=23,打印出第一行23

打印完23,End Sub后,程序返回到第一次进入Sub1时的End If,继续往下执行X=X*2+1=23*2+1=47
,因此打印出47.

作者: z_wenqian   发布时间: 2011-07-28

如果你将
If X < 10 Then
Call Sub1(X)
End If
改为
If X < 10 Then
Sub1(X)
End If

打印出的将是 23 和 11

作者: z_wenqian   发布时间: 2011-07-28