这是过去一篇论文中的一个问题。我星期一正在做考试,我期待这样的问题出现。有人可以帮我回答吗?
假设您被要求递归计算三角形的面积。图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)部分。
任何帮助都会非常感激。
答案 0 :(得分:0)
因此,对于每个单位,你的宽度会逐渐减小,直到达到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);
答案 1 :(得分:0)
看起来像三角形的宽度为" n"只是:n +(n-1)+(n-2)+ ... + 1:
在伪代码中:
function foo(int n) {
if (n == 0) { return 0; }
else { return n + foo(n-1); }
}