递归计算三角形面积



这是过去一篇论文中的一个问题。我周一要参加考试,我预计会出现这样的问题。有人能帮我回答吗?


假设你被要求递归计算一个三角形的面积。图3 .1所示前五种形状的计算机近似。在这个图中,一个正方形代表一个正方形单位。注意,面积取决于三角形的宽度。

                                          []
                               []        [][]
                     []       [][]      [][][]      Figure III.1
           []       [][]     [][][]    [][][][]
  []      [][]     [][][]   [][][][]  [][][][][]
width=1  width=2   width=3   width=4    width=5

图III.1三角形的计算机逼近。
a)递归计算面积的基本情况是什么?
[1]
b)推导递归公式,以给定的"宽度"计算面积。
提示:考虑连续"width"值之间的面积差。
[3分]


我很确定(a)部分的答案是:

if(width == 0)  
    return 0;  

但是我不知道如何回答(b)部分和(c)部分。

所以对于每一个withh单位,你的宽度一个接一个地减小,直到它达到0。

这个没有经过测试,但是我相信应该是这样的。

int CalculateArea(int width, int area)
{
      if(width == 0)
          return area;
      area = area + width;
      return CalculateArea(width - 1, area);
}

当你调用这个函数时不要忘记先给区域0

int Width = 5;
int area = CalculateArea(Width, 0);

看起来宽度为"n"的三角形的面积只是:n + (n-1) + (n-2) +…+ 1:

在伪代码中:

function foo(int n) {
    if (n == 0) { return 0; }
    else { return n + foo(n-1); }
}

最新更新