【发布时间】:2011-12-08 16:49:16
【问题描述】:
Public Sub BinarySearch_Surname(ByVal BrownieArray() As Brownie_Structure, ByVal SearchItem As String, ByVal LowInt As Integer, ByVal HighInt As Integer)
Dim ItemFound As Boolean = False
Dim SearchFailed As Boolean = False
Dim Midpoint As Integer = Int((LowInt + HighInt) / 2)
Try
If BrownieArray(Midpoint).Surname = SearchItem Then
ItemFound = True
Else
If LowInt >= HighInt Then
SearchFailed = True
Else
If BrownieArray(Midpoint).Surname < SearchItem Then
**BinarySearch_Surname(BrownieArray, Midpoint + 1, HighInt, ItemFound)
Else
BinarySearch_Surname(BrownieArray, LowInt, Midpoint - 1, HighInt)**
End If
End If
End If
If SearchFailed = True Then
MessageBox.Show("Failed to find Suranme in database", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
If ItemFound = True Then
MessageBox.Show("Surname: " & BrownieArray(Midpoint).Surname, "Found", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
Catch
MessageBox.Show("Failed to find , please insert correct infomation and try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End Try
End Sub
这种递归算法会出现StackOverflow,我知道为什么会导致错误但不知道如何解决?
【问题讨论】:
-
请添加 BinarySearch_Surname() 的 Header 以便我们查看参数。但是您正在以一种似乎不是“中间”的方式更改 MidPoint。
-
使用 Array.BinarySearch() 或 [homework] 标签。
标签: database vb.net algorithm recursion stack-overflow