VB.Net - 递归或迭代

时间:2015-10-26 10:33:36

标签: vb.net recursion iteration

首先在这里发帖,因为我遇到了一个让我难过的问题。我正在为uni的一个项目创建一个计算工具,现在我不是它的学位,但是对于这个项目我到目前为止还没有遇到过问题。

基本上我正在为建筑物进行设计工作,建筑物的每个楼层都可以分配9种可能的设计中的一种。然后分配解决方案,然后计算成本,我试图找到最有效的组合。

通常我会使用一些嵌套循环来找到最好的设计,没有问题,但对于计算工具我需要更改楼层数,因此需要更改嵌套循环的数量,我不熟悉如何做。

一般结构是这个

1- X楼层数。

每个楼层都有可能的设计。

根据每个组合,必须计算成本,如果它在最佳的5个结果中,则将被存储。

总共有9 ^ x个解决方案。

所以

Floor = 1
For Solution = 1 to 9

  Floor = 2
  For Solution = 1 to 9

      CalculateCost()
      if CalculateCost < Best Then
      Write, Floor1 Solution Value, Floor2 Solution Value to Output

等等...

现在我正在使用Vb.net,并且不知道如何进行递归。如果有人可以简单地指出我可以帮助我解决这个问题的资源,我将非常感激。

编辑 - 虽然我试图简化,但设计实施的成本会根据各种其他因素而变化,因此我不能简单地为所有设计采用最便宜的设计。我试图通过实践理论来解决这个问题,到目前为止已经找到了解决方案,因此需要强力方法

1 个答案:

答案 0 :(得分:0)

您已经使用For循环为每个给定的楼层尝试每个解决方案,但您需要手动迭代Floor变量。您似乎有9个独立声明的变量,其模式为FloorX Solution Value。鉴于所有这些,我认为你真正需要的是dynamic array。这是使用这种方法的一些粗略代码:

Dim FloorSolutionValues() As Byte ' I'm assuming values of 1-9
Dim NumberOfFloors As Integer ' Get this from the user
ReDim FloorSolutionValues(NumberOfFloors - 1)
For CurrentFloor As Integer = 0 To NumberOfFloors - 1
    For CurrentSolution As Byte = 1 To 9
        If CalculateCost() < FloorSolutionValues(CurrentFloor) Then
            FloorSolutionValues(CurrentFloor) = CurrentSolution
        End If
    Next
Next

我做了一些可能会或可能不是真的假设,但这应该让你走上正确的道路。