这是过去一篇论文中的一个问题。我周一要参加考试,我预计会出现这样的问题。有人能帮我回答吗?
假设你被要求递归计算一个三角形的面积。图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); }
}