Dim A
Public s
Sub test1()
Dim x, y, z
A = Range("A1").CurrentRegion
x = Int((1 + UBound(A)) / 2)
y = A(x, 1)
z = [e1]
s = ""
MsgBox dg(x, y, z)
End Sub
Function dg(x, y, z) 'x是二分位;y是二分位上的值;z是查找值
' Debug.Print "x=" & x, "y=" & y
s = s & "二分位第" & x & "个数,值为" & y & vbCrLf
If y = z Then
'结束递归
GoTo 100
Else
'继续递归
If y > z Then
'往上查
Select Case x
Case 1
'结束递归
GoTo 100
Case 2
x = 1
Case Else
x = Int((1 + x) / 2)
End Select
Else
'往下查
Select Case x
Case UBound(A) - 1
x = UBound(A)
Case UBound(A)
'结束递归
GoTo 100
Case Else
x = x + 1 + Int((1 + UBound(A) - x) / 2)
End Select
End If
y = A(x, 1)
dg = dg(x, y, z)
End If
100
dg = s
End Function
Dim A
Public s
Sub test1()
Dim x, y, z
A = Range("A1").CurrentRegion
x = Int((1 + UBound(A)) / 2)
y = A(x, 1)
z = [e1]
s = ""
MsgBox dg(x, y, z)
End Sub
Function dg(x, y, z) 'x是二分位;y是二分位上的值;z是查找值
' Debug.Print "x=" & x, "y=" & y
s = s & "查找值是" & z & ",二分位是第" & x & "个数,值是" & y & vbCrLf
If y = z Then
GoTo 100 '结束递归
Else
'继续递归
If y > z Then
'往上查
Select Case x
Case 1
GoTo 100 '结束递归
Case 2
x = 1
y = A(x, 1)
GoTo 100 '结束递归
Case Else
x = Int((1 + x) / 2)
End Select
Else
'往下查
Select Case x
Case UBound(A) - 1
x = UBound(A)
y = A(x, 1)
GoTo 100 '结束递归
Case UBound(A)
GoTo 100 '结束递归
Case Else
x = x + 1 + Int((1 + UBound(A) - x) / 2)
End Select
End If
y = A(x, 1)
dg = dg(x, y, z)
End If
100
dg = s
End Function