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

vb.net:如何在我的程序中使用递归?,vb.net,recursion,Vb.net,Recursion,我试图找到给定的非等边三角形的面积。首先,有一个长度为“l”的大等边三角形,从它的所有边开始,新的等边三角形以“l/3”的长度形成,再次从所有3个三角形的自由边(即只有2个边)开始,新的三角形以“l/9”的长度形成 所以我需要找到所有三角形的总面积,如果没有重复和长度,使用递归 这里是我尝试过的代码。它给出了2到2次重复的正确结果,给出了更多重复的错误结果: Module Module1 Dim noOfTriangles As Single = 3 / 2 Function

我试图找到给定的非等边三角形的面积。首先,有一个长度为“l”的大等边三角形,从它的所有边开始,新的等边三角形以“l/3”的长度形成,再次从所有3个三角形的自由边(即只有2个边)开始,新的三角形以“l/9”的长度形成

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

这里是我尝试过的代码。它给出了2到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

我不理解问题的确切描述,但代码中有一些问题需要解决

  • 第一个业务订单,在项目选项中启用
    选项始终。那么您的代码将不再编译,因为它包含bug

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

  • 不返回任何内容
    毫无意义。一个区域永远不是“什么都不是”。但是,它可以是
    0

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

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

  • 把逻辑弄清楚。我真的不知道代码的作用。这包括使用专有名称
    noOfTriangles
    类型为
    Single
    ,具有初始值
    3/2
    。这当然毫无意义:三角形的数量永远是整数,而不是分数


我不理解问题的确切描述,但您的代码中有一些问题需要解决

  • 第一个业务订单,在项目选项中启用
    选项始终。那么您的代码将不再编译,因为它包含bug

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

  • 不返回任何内容
    毫无意义。一个区域永远不是“什么都不是”。但是,它可以是
    0

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

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

  • 把逻辑弄清楚。我真的不知道代码的作用。这包括使用专有名称
    noOfTriangles
    类型为
    Single
    ,具有初始值
    3/2
    。这当然毫无意义:三角形的数量永远是整数,而不是分数


    • 你不需要乘以正三角形,否则你会重复计算。将递归的一个级别上的三角形数乘以一个区域。但是你的面积本身是一个递归,所以你要计算所有三角形到递归底部的面积。这意味着,在第三次迭代中,没有“6个三角形”,只有“2个三角形”,事实上,在每次迭代中,除了第一次,只有“2个三角形”。通过调用AreaOfTriangle之外的乘法,可以直观地看到句柄中有6、12、24等

      更换这条线

      noOfTriangles = noOfTriangles * 2
      
      为此:

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

      它应该会起作用

      你不需要乘以正三角形,否则你会重复计算。将递归的一个级别上的三角形数乘以一个区域。但是你的面积本身是一个递归,所以你要计算所有三角形到递归底部的面积。这意味着,在第三次迭代中,没有“6个三角形”,只有“2个三角形”,事实上,在每次迭代中,除了第一次,只有“2个三角形”。通过调用AreaOfTriangle之外的乘法,可以直观地看到句柄中有6、12、24等

      更换这条线

      noOfTriangles = noOfTriangles * 2
      
      为此:

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

      它应该会起作用

      与此相关?与此相关?我知道这个程序非常混乱:但是对于noOfTriangles,第一个值3是必需的,然后是6,然后是12,依此类推,所以我给出了初始值3/2,当乘以2时得到3,然后再乘以2时得到6,依此类推,我知道这确实是混乱的一个,但对于我这样做的流来说。(#我仍然是业余程序员)我知道这个程序非常混乱:但是对于noOfTriangles,第一个值3是必需的,然后是6,然后是12,依此类推,所以我给出了初始值3/2,当乘以2时得到3,然后再乘以2时得到6,依此类推,我知道这确实是混乱的一个,但对于我这样做的流来说。(#我仍然是业余程序员)起初有一个三角形。。。。。。在第二次迭代时,noOfTriangles=3……在第三次迭代时,noOfTriangles=6(每3个新三角形中有2个)。。。。。。。。在第四次迭代中,noOfTriangles=12(每6个新三角形中有2个),我知道。但是你的递归正在为你处理这个问题。你不需要一直把noOfTriangles乘以2。相信我。你试过我的代码了吗?你可以用两种方式查看递归:在递归的一个层次上找到所有三角形的面积,或者在递归的底部找到一个三角形的面积(以及所有附加到该三角形的三角形)。您的代码同时对这两种方法进行了一些组合。行“noOfTriangles*AreaOfTriangle”负责为您执行“noOfTriangles*2”操作。您的代码是,将第一个三角形的面积加上下一个三角形面积的3倍。每个三角形的面积是等边三角形的面积加上下一个三角形的6*面积。这就是错误所在。只有两个三角形,不是6个。总共有6个,但是你的递归为你做了3*2位,我不知道另一种解释它的方法,一个