VB递归堆栈溢出,高手改下

第一次递归没问题,第二次递归就出错了。PrivateFunctionw(ByValstr1AsString,ByValstr2AsString)AsStringDimi,... 第一次递归没问题,第二次递归就出错了。
Private Function w(ByVal str1 As String, ByVal str2 As String) As String
Dim i, j, k As Integer
Dim jishu As Integer
Dim x1(), y1() As String
ReDim y1(UBound(a, 2))
If bl = False Then
For i = 0 To UBound(str) - 1
If str(i) = str1 Then Exit Function '碰到已经递归过的站点退出递归
Next
End If
'获取str1站点下的所有线路
For i = 0 To UBound(a, 1)
For j = 1 To UBound(a, 2)
If a(i, j) = str1 Then
ReDim Preserve x1(jishu)
x1(jishu) = a(i, 0)
jishu = jishu + 1
Exit For
End If
Next
Next
'把数组x站点下所有线路的路线搜索出来,看看能否到达str2站点

For k = 0 To UBound(x1)
'---------------------------------
For i = 0 To UBound(a, 1)
If a(i, 0) = x1(k) Then
For j = 1 To UBound(a, 2)
If a(i, j) = str2 Then '找到则退出递归
bl = True
Exit Function
Else '没找到继续递归
ReDim str(num2)
str(num2) = a(i, j)
num2 = num2 + 1
w = w & "——" & w(a(i, j), str2) '换乘路线
End If
If bl = True Then Exit Function
Next
End If
Next
'---------------------------------
Next
End Function
展开
 我来答
百度网友bfa4ff5ae
2011-08-24 · TA获得超过3908个赞
知道小有建树答主
回答量:578
采纳率:0%
帮助的人:733万
展开全部
这是DFS吗?如果空间宽裕,改成BFS试试看。不宽裕的话还是多剪枝吧,或者估价一下,从可能最优的解到可能最劣的解扩展搜索树。
如果是在找最短路,那就用Bellman-Ford或SPFA试试看。

不过
w = w & "——" & w(a(i, j), str2)
这个语句行为比较奇怪呃
更多追问追答
追问
我做的是一个公交换乘的程序。
从A到D,无法直接达到,换乘。
A问自己下面的所有公交线路,你们谁能到达D,都不能,再B问,还不行,直到找到路线,或遇到已经算过的线路退出递归,再C问。
w = w & "——" & w(a(i, j), str2)
我写错了。是"——" & w(a(i, j), str2),表示换乘搜索。最后的结果是A——B——C——D
结果才递归了两次就堆栈溢出。
追答
懂了,最少换乘吗?那就用广度优先搜索吧,深度优先搜索很不适合这个问题的。
我觉得你描述的思想有问题。
应该这样考虑如何找到路:
从起点站开始,然后沿着所有经过起点的路线往下找,如果能到终点站那就结束,否则把线路上所有点入队,然后依次作为起点再找,直到所有的点都遍历过或者达到终点站为止。同时要记录前驱的。
手机用户24798
2011-08-24 · 超过11用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:80万
展开全部
Public Function MyHex(ByVal n As Integer) As String
Dim x As Integer
Dim s As String
Do While n <> 0
x = n Mod 16
s = IIf(x < 10, x, Chr(x + 55)) & s
n = n \ 16
Loop
MyHex = s
End Function

递归的解法
Public Function MyHex2(ByVal n As Integer) As String
If n < 16 Then
MyHex2 = IIf(n < 10, n, Chr(n + 55))
Else
m = n Mod 16
MyHex2 = MyHex2(n \ 16) & IIf(m < 10, m, Chr(m + 55))
End If
End Function
追问
答非所问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4b68195
2011-08-23 · TA获得超过1520个赞
知道大有可为答主
回答量:1773
采纳率:100%
帮助的人:1730万
展开全部
For i = 0 To UBound(str) - 1中的str没有定义。
追问
堆栈溢出跟变量有没有定义有什么关系?这些变量我在声明部分都定义了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式