0

我试图找到给定没有等边三角形的区域。第一个有一个长度为“l”的大等边三角形,从它的所有侧面再次形成长度为“l / 3”的新等边三角形,从所有3个三角形的自由边(即只有2边)形成长度为“l”的新三角形/9"。

所以如果没有使用递归给出重复和长度,我需要找到所有三角形的总面积

所以这里是我尝试过的代码。它给出了最多 2 次重复的正确结果和更多的错误结果:

Module Module1
    Dim noOfTriangles As Single = 3 / 2

    Function AreaOfTriangle(ByVal noOfRepetition As Integer, ByVal length As Double)
        If noOfRepetition = 0 Then
            Return Nothing
        Else
            noOfTriangles = noOfTriangles * 2
            Return (((3 ^ (1 / 2)) / 4) * (length ^ 2) + noOfTriangles * AreaOfTriangle(noOfRepetition - 1, length / 3))
        End If

    End Function

    Sub Main()
        Dim area As Double
        area = AreaOfTriangle(3, 9)
        Console.WriteLine(area)
        Console.ReadKey()
    End Sub 
End Module
4

2 回答 2

3

我不明白确切的问题描述,但您的代码中有一些需要修复的地方。

  • 首先Option Strict,在项目选项中启用。总是。然后您的代码将不再编译,因为它包含错误。

  • 缺少函数的返回类型。它可能是 (!)SingleDouble.

  • Return Nothing没有意义。一个区域永远不是“无”。但是,它可以是0

  • 不要使用模块范围的变量,而是使用另一个参数。

  • 声明变量时立即初始化变量:Dim area As Double = AreaOfTriangle(…).

  • 让逻辑更清晰。我真的不知道代码的作用。这包括使用专有名称。noOfTriangles是 类型Single并且具有初始值3 / 2。这当然没有意义:许多三角形将始终是整数,而不是分数。

于 2012-09-09T16:29:29.680 回答
0

您不需要乘以 noOfTriangles ,否则您将重复计算。您将递归一级的三角形数量乘以面积。但是你的区域本身是一个递归,所以你正在计算所有三角形到递归底部的面积。这意味着,在第 3 次迭代中,没有“6 个三角形”,只有“2 个三角形”,实际上在每次迭代中,除了第一个迭代,只有“2 个三角形”。通过对 AreaOfTriangle 的调用之外的乘法处理,视觉上有 6、12、24 等。

替换此行

noOfTriangles = noOfTriangles * 2

有了这个:

If (noOfTriangles = 3 / 2) Then
    noOfTriangles = 3
Else
    noOfTriangles = 2
End If

它应该工作。

于 2012-09-09T16:54:04.713 回答