vb.net:如何在我的程序中使用递归?

时间:2012-09-09 16:21:41

标签: vb.net recursion

我试图找到没有等边三角形的区域。第一个是一个大的等边三角形,长度为“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

2 个答案:

答案 0 :(得分:3)

我不明白确切的问题描述,但是代码中的一些内容需要修复。

  • 第一项业务,在项目选项中启用Option Strict始终。然后您的代码将不再编译,因为它包含错误。

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

  • 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

它应该有效。