vb的递归算法问题,
首先,当n=1的时候,a-c你懂啥。
当n=2的时候,电脑先执hanoi 2 a b c
if不可行,然后执行 hanoi 1 a c b if可行,结果one,three对应着 a-b。接着再执行上面未完的hanoi n a b c 结果对应着a-c。
下面来看三,先是hanoi 3 a b c执行else
hanoi 2 a c b else hanoi 1 a b c注意,这里bc的位置又换了回来。所以,在hanoi 1 a b c(属于hanoi n-1 a c b) 结果 a-c然后回归,hanoi 2 a c b print a-b 接着回归最开始的hanoi 3 a b c print a-c。在这个过程中,换位是重点。
vb快速排序源代码
Private Sub Command1_Click()
Dim a(10) As Integer
For i = LBound(a) To UBound(a)
a(i) = Int(Rnd * 100)
Next i
qsort a, LBound(a), UBound(a)
For i = LBound(a) To UBound(a)
Print a(i);
Next i
Print
End Sub
Sub swap(a As Integer, b As Integer)
t = a: a = b: b = t
End Sub
Sub qsort(a() As Integer, ByVal p As Integer, ByVal r As Integer)
Dim q As Integer
If p >= r Then Exit Sub
q = p
For i = p To r - 1
If a(i) < a(r) Then swap a(i), a(q): q = q + 1
Next i
swap a(q), a(r)
qsort a, p, q - 1
qsort a, q + 1, r
End Sub
VB递归算法
调用Test(3);
t=3, t>=1成立, 调用Test(2);
t=2, t>=1成立, 调用Test(1);
t=1, t>=1成立, 调用Test(0);
t=0, t>=1不成立, 函数返回值为0.
返回到Test(1), 执行余下部分:
for i=3 to 1 step -1
print chr(asc("A")+i)
next
print
输出:
D
C
B
调用的Test(1)结束, 函数返回值1.
继续执行Test(2)的余下部分:
for i=3 to 2 step -1
print chr(asc("A")+i)
next
print
输出:
D
C
调用的Test(2)结束, 函数返回值2.
继续执行Test(3)的余下部分:
同理输出:
D
调用的Test(3)结束, 函数返回值3.
最后, 执行 Print Test(3) 的输出, 打印返回结果:
3
-----------
所以, 最后的结果是:
D
C
B
D
C
D
3