早教吧 育儿知识 作业答案 考试题库 百科 知识分享

请教一道VB的程序阅读题执行下面的程序,第一行结果是;第二行结果是;第三行结果是。PrivateSubFormLoad()test1EndSubPrivateSubtext(xAsInteger)x=x*x+1Ifx<6ThenCalltest(x)

题目详情
请教一道VB的程序阅读题
执行下面的程序,第一行结果是____;第二行结果是____;第三行结果是_____。
Private Sub Form_Load()
test1
End Sub
Private Sub text(x As Integer)
x = x * x + 1
If x < 6 Then Call test(x)
x = x * 2 + 1
Form1.Print x
End Sub
问题:答案是53、107、215
我想要具体的解题过程
▼优质解答
答案和解析
首先, test1应写做test 1,中间加个空格。其次,test 1函数调用不应该在form_load中使用,因为form_load在执行时窗口还并未创建完成,此时的显示输出会在窗口创建完成后被窗口重绘刷新掉。所以可以在窗口中添加一个按钮,在按钮中执行 test 1
再次,Private Sub text(x As Integer) 函数定义名称写错,应该改写成Private Sub test(x As Integer)

下面,我们说明一下执行test1 1的运行过程。
1. x=x*x+1 此时x=1 所以执行后x=1*1+1=2
2. 执行if语句时,因为 2<6 所以执行调用call test(2),程序进入递归调用,第一次压栈
3. 再次执行x=x*x+1 此时x=2 ,所以 执行后 x=x*x+1=5
4. 执行if语句时,因为 5<6 所以执行调用call test(5),程序进入递归调用,第二次压栈
5. 再次执行x=x*x+1 此时x=5 ,所以 执行后 x=x*x+1=26
6. 执行if语句时,因为 26>6 程序继续下行执行 x=x*2+1 ,此时x=26,执行后x=53
7. 在窗口中输出53
8. 递归返回,第一次退栈
9. 再次执行x=x*2+1语句,此时x=53,执行后x=107
10. 在窗口中输出107
11. 递归返回,第二次退栈, 此时堆栈已完全退栈到栈底
12. 再次执行x=x*2+1语句,此时x=107,执行后x=215
13. 在窗口中输出215
14. 因为堆栈已回到栈底,递归完成,所以程序执行完毕

若满意答案,请及时采纳,谢谢