我试图找到没有等边三角形的区域。第一个是一个大的等边三角形,长度为“l”,从它的四周都是新的等边三角形,从所有3个三角形的自由侧(即只有2个边)再次形成“l / 3”长度,形成长度为“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
答案 0 :(得分:3)
我不明白确切的问题描述,但是代码中的一些内容需要修复。
第一项业务,在项目选项中启用Option Strict
。 始终。然后您的代码将不再编译,因为它包含错误。
缺少函数的返回类型。它可能是(!)Single
或Double
。
Return Nothing
毫无意义。一个区域永远不会“没有”。但是,它可以是0
。
请勿使用模块范围的变量,而是使用其他参数。
在声明变量时立即初始化变量:Dim area As Double = AreaOfTriangle(…)
。
让逻辑清晰。我真的不知道代码是做什么的。这包括使用专有名称。 noOfTriangles
的类型为Single
,初始值为3 / 2
。这当然没有意义:许多三角形总是一个整数,而不是一个分数。
答案 1 :(得分:0)
您不需要乘以noOfTriangles,否则您将重复计算。您将递归的一个级别的三角形数乘以一个区域。但是你的区域本身就是一个递归,所以你计算递归底部的所有三角形的面积。这意味着,在第3次迭代中,没有“6个三角形”,只有“2个三角形”,实际上在每次迭代时,除了第1个之外,只有“2个三角形”。通过对AreaOfTriangle的调用之外的乘法在视觉上有6,12,24等的事实。
替换此行
noOfTriangles = noOfTriangles * 2
有了这个:
If (noOfTriangles = 3 / 2) Then
noOfTriangles = 3
Else
noOfTriangles = 2
End If
它应该有效。