VB.Net - 递归或迭代
VB.Net - Recursion or Iteration
首先 post 在这里,因为我遇到了一个让我难过的问题。我正在为 uni 的一个项目创建一个计算工具,现在我不是 it 学位,但是对于这个项目,直到现在我还没有遇到太难的问题。
基本上我正在为一栋建筑做设计工作,建筑的每一层都可以分配 9 种可能的设计之一。然后为每一个分配解决方案然后计算成本我试图找到最有效的组合。
通常我只会使用一些嵌套循环来找到最佳设计,没有问题,但是对于计算工具我需要更改楼层数,因此我不熟悉嵌套循环的数量怎么做。
大体结构是这样的
1- X 层数。
每层有 9 种可能的设计。
必须根据每个组合计算成本,如果它在最好的 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,不知道递归怎么做。如果有人可以简单地指出我可以帮助我解决这个问题的资源方式,我将不胜感激。
编辑 - 虽然我试图简化,但设计实施的成本会根据其他各种因素而变化,因此我不能简单地只采用最便宜的设计。我试图通过实践理论解决这个问题,到目前为止找到了解决方案,因此需要暴力法
您已经在使用 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
我正在做一些可能正确也可能不正确的假设,但这应该会让你走上正确的道路。
首先 post 在这里,因为我遇到了一个让我难过的问题。我正在为 uni 的一个项目创建一个计算工具,现在我不是 it 学位,但是对于这个项目,直到现在我还没有遇到太难的问题。
基本上我正在为一栋建筑做设计工作,建筑的每一层都可以分配 9 种可能的设计之一。然后为每一个分配解决方案然后计算成本我试图找到最有效的组合。
通常我只会使用一些嵌套循环来找到最佳设计,没有问题,但是对于计算工具我需要更改楼层数,因此我不熟悉嵌套循环的数量怎么做。
大体结构是这样的
1- X 层数。
每层有 9 种可能的设计。
必须根据每个组合计算成本,如果它在最好的 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,不知道递归怎么做。如果有人可以简单地指出我可以帮助我解决这个问题的资源方式,我将不胜感激。
编辑 - 虽然我试图简化,但设计实施的成本会根据其他各种因素而变化,因此我不能简单地只采用最便宜的设计。我试图通过实践理论解决这个问题,到目前为止找到了解决方案,因此需要暴力法
您已经在使用 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
我正在做一些可能正确也可能不正确的假设,但这应该会让你走上正确的道路。