递归总是让我很难接受。我明天有一个测试,他说测试会有一些递归,所以我想做好准备。
我想要解决的问题是:
给定具有实例变量Rectangle
和width
的类height
,提供递归getArea()
方法。构造一个宽度比原始宽度小1的矩形,并调用其getArea
方法。
所以我知道在递归中你最终会用简化的再现来调用自身内部的方法。就像,我知道getArea(int n)
中的任何地方,我将不得不致电getArea(n - 1)
。我只是不确定如何处理width
和height
。
所以我有这个:
public int getArea()
{
if (width == 1) {
// Base case here. Not sure what to do for this.
return 1; // Maybe? I'm not sure.
} else {
Rectangle smallerRect = new Rectangle (width - 1);
int smallerArea = smallerRect.getArea();
return smallerArea + height + width;
}
}
任何人都可以帮助我更好地理解递归或者如何通过递归函数进行思考吗?感谢。
答案 0 :(得分:3)
您已经正确地获得了递归,具有基本案例和递归案例,并且在递归调用中正确减少了参数(除了评论者注意到,您还需要指定新矩形的高度)。它只是需要修复的几何体:height
在递归过程中不会发生变化;基础矩形的区域是多少,宽度为1,高度为height
?如果您被告知宽度为width - 1
和高度为height
的矩形区域,您可以通过添加宽度为1且高度为height
的条带来获得多少额外区域?
供以后使用:虽然在数学上是正确的,但这是一种计算矩形区域的可怕方法,所以请不要在考试/作业情况之外这样做: - )
答案 1 :(得分:1)
也许这样的事情?它基本上只是通过递归加倍宽度......
public int getArea() {
return getArea(width);
}
private int getArea(int x) {
return x == 0 ? 0 : height + getArea(x-1);
}
答案 2 :(得分:0)
public int getArea()
{
if (width == 1) {
// Base case
return height; // Area = width(1)*height
} else {
Rectangle smallerRect = new Rectangle (width - 1, height);
int smallerArea = smallerRect.getArea();
return smallerArea + height;
}
}