递归......我被卡住了

时间:2014-12-03 08:13:19

标签: java recursion

这不是作业,只是练习。我写的第一种方法是:

写一个静态递归方法,它接受两个名为x和p的int参数,并返回x乘以p次。

我做到了,这是代码:

public static int power(int x, int p)
{
    if(p==0)
    {
        return 1;
    }
    else
    {
        int result = x * power(x, p - 1);
        return result;
    }       
}

下一个问题是:

金字塔中的每个等级都是正方形,所以如果有n个等级,则底层有n * n个球,而球的总数只是 (n * n)+(高度为n - 1的金字塔中的球数)。

高度为1的金字塔中只有一个球。编写一个静态递归方法getPyramidCount,它接受​​一个表示金字塔中级别数的int参数,并返回总球数。 (使用上面的幂方法来平方数。)

我很沮丧,因为我不知道如何写这个。我知道我想制作另一种包含幂法的方法,但我很无能为力。你能帮帮我吗?在这一点上,我觉得看到某人的代码是我理解的唯一方式。

编辑:不是故意在那里有2。它应该是x!我正在做2到8的力量而忘了放入x而不是2!

3 个答案:

答案 0 :(得分:3)

不要乘以2。这是x * x p次。像,

public static int power(int x, int p) {
    if (p <= 0) {
        return 1;
    }
    return x * power(x, p - 1);
}

答案 1 :(得分:1)

首先,您的power方法是错误的。它会计算2 ^ p而不是x ^ p。

更改

int result = 2 * power(x, p - 1);

int result = x * power(x, p - 1);

现在,对于金字塔问题,递归是:numBalls(n) = n^2 + numBalls(n-1)

因此,该方法如下所示:

public static int numBalls (int n)
{
    if (n==1)
        return 1;
    else
        return power(n,2) + numBalls(n-1);
}

答案 2 :(得分:1)

首先这一行:

int result = 2 * power(x, p - 1);

应该是这样的:

int result = x * power(x, p - 1);

但是关于你的金字塔,你的代码只有一个输入,其值为n,返回值如你所说的那样是 2 + pyramid(n-1);