VB递归题目,求详细解答过程
3.执行下面的程序,单击Commandl,在窗体上显示的变量b的值为:(7),变量c的值为(8),变量z的值为(9)OptionExplicitPrivateSubCom...
3.执行下面的程序,单击Commandl,在窗体上显示的变量b的值为:( 7 ),变量c的值为
( 8 ) ,变量z的值为( 9 )
Option Explicit
Private Sub Command1_Click()
Dim b As Integer,C As Integer,z As Integer
b=2
C=1
Z=fun(b,fun(b+1,c))+b-c+1
Print b,c,z
End Sub
Private Function fun(X As Integer,ByVal Y As Integer)As Integer
X=X-Y
y=X+Y+2
fun=Y—X
End Function
4.执行下面的程序,单击Commandl,输出的变量i的值是( 10 ) ,变量j的值是 ( 11 ) ,
变量k的值是( 12 )
Option Explicit
Private Sub Command1_Click()
Dim i As Integer,j As Integer
Dim k As Integer
i=10
j=4
k=Funk(i,j)
Print i,j,k 、
End Sub •
Private Function Funk(ByVal A As Integer,B As Integer) As Integer
A=A+B
B=B-2 .
if B=0 Or B=1 Then
Funk=1
Else
Funk=A+Funk(A,B)
End If
End Function 展开
( 8 ) ,变量z的值为( 9 )
Option Explicit
Private Sub Command1_Click()
Dim b As Integer,C As Integer,z As Integer
b=2
C=1
Z=fun(b,fun(b+1,c))+b-c+1
Print b,c,z
End Sub
Private Function fun(X As Integer,ByVal Y As Integer)As Integer
X=X-Y
y=X+Y+2
fun=Y—X
End Function
4.执行下面的程序,单击Commandl,输出的变量i的值是( 10 ) ,变量j的值是 ( 11 ) ,
变量k的值是( 12 )
Option Explicit
Private Sub Command1_Click()
Dim i As Integer,j As Integer
Dim k As Integer
i=10
j=4
k=Funk(i,j)
Print i,j,k 、
End Sub •
Private Function Funk(ByVal A As Integer,B As Integer) As Integer
A=A+B
B=B-2 .
if B=0 Or B=1 Then
Funk=1
Else
Funk=A+Funk(A,B)
End If
End Function 展开
2个回答
展开全部
你的两个题目主要是要注意函数中ByVal的应用问题
程序在运行中传递变量的时候,如果没有ByVal 就是传递变量的地址,有ByVal 的时候是传递变量的值。
第3题:在执行第一次fun的时候,b的值没有发生变化,还是2,因为传递的是b+1的地址给函数fun的,所以没有发生变化,fun返回的值是3,当然C的值由于ByVal的缘故没有发生变化。
在执行第二次fun(b,3)的时候,程序将b的地址传递给fun函数了,所以b的值进过计算后变成-1了。fun的返回是 5。
最后进行计算 5+(-1)-1+1=4
最后打印的时候是(b,c,z)-1 1 4
第4题:在执行第一次的funk的时候,根据上面的解释,i=10是不会变的,A=A+4=14,但j的值就变成了B(j)=4-2=2了。
然后在funk内执行第二次的funk函数,j的地址继续被传递计算,B(j)=2-2=0 了。 这时判断B的值为0 ,funk返回就是funk=A+1=15了。
最后打印出来的结果就是,i没有变=10,j变成了0,funk=15: 10 0 15
OK 解释完毕
程序在运行中传递变量的时候,如果没有ByVal 就是传递变量的地址,有ByVal 的时候是传递变量的值。
第3题:在执行第一次fun的时候,b的值没有发生变化,还是2,因为传递的是b+1的地址给函数fun的,所以没有发生变化,fun返回的值是3,当然C的值由于ByVal的缘故没有发生变化。
在执行第二次fun(b,3)的时候,程序将b的地址传递给fun函数了,所以b的值进过计算后变成-1了。fun的返回是 5。
最后进行计算 5+(-1)-1+1=4
最后打印的时候是(b,c,z)-1 1 4
第4题:在执行第一次的funk的时候,根据上面的解释,i=10是不会变的,A=A+4=14,但j的值就变成了B(j)=4-2=2了。
然后在funk内执行第二次的funk函数,j的地址继续被传递计算,B(j)=2-2=0 了。 这时判断B的值为0 ,funk返回就是funk=A+1=15了。
最后打印出来的结果就是,i没有变=10,j变成了0,funk=15: 10 0 15
OK 解释完毕
追问
为什么fun=3?求详细过程
追答
第三题,首先执行的是里面的那个fun,而不是外面的fun
里面的fun(3,1)=3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
3实际运行的结果是-1,1,4
4实际运行的结果是10,0,15
简单的运算主要难点在这里这两个函数的定义上
Private Function fun(X As Integer,ByVal Y As Integer)As Integer
Private Function Funk(ByVal A As Integer,B As Integer) As Integer
加上ByVal表示的是值传递,不加这个就是地址传递,
值传递,在函数里面的运算和传过来以前没关系,
地址就不一样了,比如3里面的这里
fun(b,fun(b+1,c))
第一次fun(b+1,c)因为b+1是一个新的临时地址,和b没关系这个只是考虑返回值fun=3
然后计算fun(b,3)时这是b就是地址传递,函数里面的X可以理解就是b本身,所以这个操作X=X-Y,上面过程中b的也变化了
4里面的Private Function Funk(ByVal A As Integer,B As Integer) As Integer
B同样道理,是地址传递
4实际运行的结果是10,0,15
简单的运算主要难点在这里这两个函数的定义上
Private Function fun(X As Integer,ByVal Y As Integer)As Integer
Private Function Funk(ByVal A As Integer,B As Integer) As Integer
加上ByVal表示的是值传递,不加这个就是地址传递,
值传递,在函数里面的运算和传过来以前没关系,
地址就不一样了,比如3里面的这里
fun(b,fun(b+1,c))
第一次fun(b+1,c)因为b+1是一个新的临时地址,和b没关系这个只是考虑返回值fun=3
然后计算fun(b,3)时这是b就是地址传递,函数里面的X可以理解就是b本身,所以这个操作X=X-Y,上面过程中b的也变化了
4里面的Private Function Funk(ByVal A As Integer,B As Integer) As Integer
B同样道理,是地址传递
追问
为什么fun=3?求详细过程
追答
Private Function fun(X As Integer,ByVal Y As Integer)As Integer
第一次传过来 x=3 y=1
X=X-Y
x=3-1=2
y=X+Y+2
y=2+1+2=5
fun=Y—X
fun=5-2=3
End Function
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询