【问题标题】:Calculate Area of Triangle Recursively递归计算三角形面积
【发布时间】:2023-03-24 02:44:01
【问题描述】:

这是过去论文中的一个问题。我星期一要考试,我期待这样的问题出现。谁能帮我解答一下?


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

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

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


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

if(width == 0)  
    return 0;  

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

任何帮助将不胜感激。

【问题讨论】:

  • 看来帖子搞砸了我的三角形:/ 我今天过得很糟糕。
  • area(0)和area(1)有什么区别?在区域(4)和区域(5)之间?在 area(n) 和 area(n+1) 之间?

标签: recursion area


【解决方案1】:

因此,对于每个宽度单位,宽度都会逐渐减小,直到达到 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);

【讨论】:

    【解决方案2】:

    看起来宽度为“n”的三角形面积正好是:n + (n-1) + (n-2) + ... + 1:

    在伪代码中:

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

    【讨论】:

    • 这不会总是返回 0,因为每次 n 为 0 并且确定为 0 时都返回 0?
    • 将n改为1并返回1
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 2017-11-21
    • 1970-01-01
    • 2015-07-29
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    相关资源
    最近更新 更多