什么是"递归条件"此代码(Java中的递归)

时间:2015-05-27 19:27:53

标签: java recursion

我正在解决这个问题,我不明白解决方案。

问题的屏幕截图位于http://i.stack.imgur.com/aUtRk.png,并在此处引用:

  

假设参数n是非负的,那么递归是什么   方法的条件(允许调用递归方法)   mystery

public int mymestry( int n, int m )
{
    if ( n == 0 )
        return 0;
    if ( n == 1 )
        return m;
    return m + mymestry( n - 1, m );
}

最初我认为解决方案应该是n > 0;但我被告知正确的解决方案是n >= 2

为什么n >= 2被认为是正确的解决方案,而不是n > 0

3 个答案:

答案 0 :(得分:3)

根据您使用的术语:

"递归条件"是一组环境,函数将递归调用自身以减少问题域。发生这种情况时,会向堆栈添加一个新的函数调用,并且调用会更深入"

"停止条件"是一组情况,函数将直接提供答案(将反馈到任何调用函数)。发生这种情况时,先前添加到堆栈的函数调用将接收答案,然后将答案提供给其调用函数。换句话说,堆栈是"展开"或者变得更小"。

根据提供的代码,如果n == 0n == 1,则不会发生递归。因此,n > 0不一定满足条件。 n >= 2将导致函数被递归调用,因此它表示"递归条件"

答案 1 :(得分:1)

只有在有多个要处理的元素时才需要递归。 如果有一个或零个元素,则返回。

答案 2 :(得分:0)

您的mymestry函数似乎有多个nm,当然您可以从1开始而不是两个,并将您的函数更改为:

public int mymestry (int n, int m)
{
    if(n==0)
        return 0;
    return m + mymestry(n-1, m);
}

但编写此代码的人,将m*1视为一个微不足道的倍数并返回其值而不是计算它。