vb中的递归问题 每次看到递归问题就头大,有没有大神通俗易懂的解释一下 还有递归的顺序是什么

OptionExplicitOptionBase1PrivateSubCommand1_Click()Dima(3)AsIntegerPrintt(3,a)Printa(... 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
展开
 我来答
牧云沐雨
2016-08-25 · TA获得超过1064个赞
知道小有建树答主
回答量:116
采纳率:81%
帮助的人:89.8万
展开全部

虽然老生常谈,但是百度知道是支持显示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

类似的,相同数据可以省略不谢。

只需要细心和耐心,相信递归也会变得很简单的!   

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式