在递归方法中,我们必须设置一些基本情况。我们可以将这些基本案例定义为该方法的基本操作吗?据我所知,基本操作是该方法的核心功能,这意味着每次运行该方法都必须通过这些功能。 (如果我错了,请告诉我)
另一个问题是我是否在基本案例中得到了if语句,例如
if(a!= b&& b!= c){}
是否算作1或2个基本操作?因为它正在检查2部分内容:a!= b和b!= c在单个if语句中。
这很困惑。
还有一件事是:我不确定这种代码是否合适:
递归方法()
基本情况:
XXXXXXX XXXXXXX XXXXXXX
递归案例:
//我应该将此部分移动到基础案例吗?
if(conditions){
return (Recursive method() || Recursive method());
// ********************************************* ***********
else if(conditions){
do something;
return Recursive method();
因为我认为基本情况仅用于在满足条件时定义精确值。因此,我将此部分留在递归案例中。我对此不太确定。
我不是要求课程作业的答案,只是为了确保这个概念是否正确。所以我没有把我的算法放在这里。对不起,如果这让你无法理解我的问题。我会尽力解释。
感谢。
答案 0 :(得分:0)
根据提供的定义,基本情况或终止案例是一种停止递归调用的条件。
基本操作的定义在这个问题上有点不清楚,老实说我在这里迷路了。但是根据我的理解,它应该是一组在函数中完成的操作,无论基本情况。链接到定义会有所帮助!
我们举一个简短的例子:
/**
* Let's assume the result is not obvious here regardless it's a nth triangular number.
* Added there a System.out though.
*/
public void calc(int i) {
System.out.println(i);
if (i == 0)
return 0;
return i + calc(i - 1);
}
如何停止递归计算第一个条件if (i == 0)
到true
的唯一情况。这意味着此条件代表基本情况。当i
具有除零以外的任何其他值时,递归继续。
在该示例中,无论方法结果如何,唯一的操作是打印值i
。因此,这是该方法的唯一基本操作。 (根据定义,对条件的评估可能也可能不被视为操作,因为它不会改变任何值,也不会产生任何副作用,例如打印。)
我们可以将这些基本案例定义为方法的基本操作吗?
一般不会,因为这些代表不同的情况。第一个定义了递归停止的情况,第二个定义了总是完成的情况。因此,如果将它们组合在一起,最终会得到一个始终停止递归的函数。
对于以下情况,它们可能是相同的。
public void calc(int i) {
return i + 1;
}