vb中的递归问题 每次看到递归问题就头大,有没有大神通俗易懂的解释一下 还有递归的顺序是什么
Option Base 1
Private Sub Command1_Click()
Dim a(3) As Integer
Print t(3, a)
Print a(1), a(2), a(3)
End Sub
Private Function t(n As Integer, a() As Integer) As Integer
Dim i As Integer
If n > 1 Then
For i = 1 To n
a(n) = a(n) + 1
t = t(n - 1, a)
Next i
Else
t = 1
End If
End Function 展开
虽然老生常谈,但是百度知道是支持显示VB代码的,这种排版辣眼睛,,Ծ‸Ծ,,
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim a(3) As Integer
Print t(3, a)
Print a(1), a(2), a(3)
End Sub
Private Function t(n As Integer, a() As Integer) As Integer
Dim i As Integer
If n > 1 Then
For i = 1 To n
a(n) = a(n) + 1
t = t(n - 1, a)
Next i
Else
t = 1
End If
End Function
先简述一下结果:
1[换行]
0 6 3
思考过称:
要点为这个t函数
先大致看一下,输入值为n,每次递归n都是For循环的i -1
递归以及很多的问输出值的问题,拿笔列表是最好的方法。列表的要点是列出变量,在做的过程中,把自己当成代码解释器,逐行执行代码
①:
输入值:n=3,a数组
n>1满足,执行If下语句
i=1
a3(不写括号,下同)=0+1=1
t=t(3-1=2,a)
进入递归
输入值n=2,a
i=1
a2=0+1=1
t=t(1,a)
递归时发现1=1,所以t=1
i=2
a2=1+1=2
t=t(1,a)同上=1
退出递归
i=2
a3=1+1=2
t=t(3-1=2,a)
同上执行一遍
i=1时
a2=2+1=3
t=1
i=2时
a2=3+1=4
t=1
退出
i=3
a3=2+1=3★
t=t(2,a)
同上
i=1时
a2=4+1=5
t=1
i=2时
a2=5+1=6★
t=1★
退出
i到3了,退出大函数
向上查看每个变量最后出现的值(我用★标注了)
所以:
t=1
a1=0,a2=6,a3=3
符合程序实际运行
递归算是比较容易出错的题目之一,我的建议是用笔指着执行,如果有跳转(比如递归,或者goto、exit do之类的),一定要记住跳转点,记不住一定要标记一下。变量的变化其实很简单,列表以后一个一个改就行,变一次就换一行写,比如这样:
a1 a2 a3 t
0 0 0 0
0 1 1 1
类似的,相同数据可以省略不谢。
只需要细心和耐心,相信递归也会变得很简单的!