一道VB题 求解!!!!!!!

private sub command1_click()
dim x as integer
x=val(inputbox("请输入一个整数“))
fun(x)
end sub
private sub fun(x as integer)
if x mod 2=o then fun(x/2)
print x;
end sub
执行上述过程输入6,结果是?
不要答案!!!要过程!!!!

1、当点击按钮1的时候

先运行定义语句:dim x as integer,定义x为一个整型变量。

然后运行:x=val(inputbox("请输入一个整数“)),会弹出一个窗口,让你输入,你就输入6,程序会把6赋值给x。
fun(x)的意思是调用这个函数。因为x=6,即:fun(6)
2、if x mod 2=o then fun(x/2),如果x能被2整除,那么就调用fun(x/2),因为6刚好能被2整除,所以就调用fun(x/2),这时x/2=6/2,所以调用的是fun(3),因为3不能被2整除,所以,到下一步,在窗体输出3,完成后,没有结束,前面if x mod 2=o then fun(x/2)时,后面还有一句print x,于是再次在窗体输出6,结束。
3、总之,这道题答案是先在窗体输出的3,再输出6。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-13
这是发生递归调用的程序:
在private sub command1_click()里的fun(x),将x=6作为参数,调用自定义过程fun,进入fun;
执行

if x mod 2=0 then fun(x/2) '应该是0,不是字母o吧?

由于x = 6,所以满足x mod 2=0,执行fun(x/2),用3调用自定义过程fun,这里是在过程fun中再一次去调用自定义过程fun,即自己调用自己,叫做递归调用。进入fun;
执行
if x mod 2=0 then fun(x/2)

这次不满足,就执行输出,3
然后要返回调用它的地点,就是返回上一次的 fun处,执行调用语句的下一条语句,就是输出语句,所以输出6。
所以,在窗体上看到的是
3 6

补充语句,关于递归,你可以搜索以下主题:
在VB程序中执行递归调用的执行原理以及过程说明:
看看我的文章。本回答被提问者采纳
第2个回答  2014-02-13
这是因为递归过程调用的结果,其核心语句就是fun(6)。
Private Sub command1_click()
Dim x As Integer
x = Val(InputBox("请输入一个整数:"))
fun (x)
End Sub
Private Sub fun(x As Integer)
If x Mod 2 = 0 Then fun (x / 2)
Print x;
End Sub
调用时,因为6能被2整除,所以就递归调用fun(3);
3不能被2整除,所以就首次打印 3 ,然后返回。返回后又遇到打印语句,本次打印的是 6 ,再次返回就结束了command1_click()的调用。
所以,总的输出就是:
3 6
第3个回答  2014-02-13
余数怎么能是英文字母o?“听不清楚”说的对。
相似回答