如何使用递归计算功率的功率?

时间:2017-03-28 22:08:37

标签: java recursion exponent

我最近一直在研究递归,但它一直很混乱。我试图编写一个java程序,它使用递归来生成一个基数的结果到一个幂,它也有一个基数有多少指数的高度。例如,一个2的基数,其幂为3,高度为3将导致:

  

(((2 ^ 3)^ 3)^ 3)

这是我(非常有缺陷)的代码:

    public static void main(String[] args) {
    System.out.println(exponentWithHeight(2, 2, 3));
}

public static int exponentWithHeight(int base, int power, int height) {
    if (power < 0 || height < 0) {
        throw new IllegalArgumentException("Check input values.");
    }
    if (power == 0) {
        return 1;
    } else {
        return (base * height * exponentWithHeight(base, power - 1, height - 1));
    }
}

我真的不确定如何获得我想要的输出;正如我所说,这对我来说真的很混乱。有人可以帮忙解释如何去做吗?

3 个答案:

答案 0 :(得分:1)

这是一个双重递归,无论是身高还是力量。

请注意,如果将值缓存在某处是有意义的,因为exponentWithHeight(base,power,0)将重复计算多次。

此代码的结果为256:

public static void main(String[] args) {
    System.out.println(exponentWithHeight(2, 2, 3));
}

public static int exponentWithHeight(int base, int power, int height) {
    if (power < 0 || height < 0) {
        throw new IllegalArgumentException("Invalid Input; Check power and/or height value.");
    }
    if (base == 0) {
        return 0;
    }
    if (height == 0) {
        return calcPower(base, power);
    } else {
        return exponentWithHeight(calcPower(base, power), power, height - 1);
    }
}

public static int calcPower(int base, int power) {
    if (power == 0) {
        return 1;
    }
    return base * power(base, power - 1);
}

答案 1 :(得分:1)

这是另一个简单明了的例子,使用for循环计算功率然后使用递归计算高度

public static long exponentWithHeight(long base, long power, long height) {
            long calculatedPower;
            if (power < 0 || height < 0) {
                throw new IllegalArgumentException("Invalid Input; Check power and/or height value.");
            }
            if (power == 0) {
                return 1;
            }
            if (height > 0) {
                calculatedPower = base;
                for (int i = (int) power; i > 1; i--) {
                        calculatedPower *= base;
                }
                return exponentWithHeight(calculatedPower, power, --height);
            }

            return base;

    }

答案 2 :(得分:0)

我们是否忘记您可以将一系列指数相乘以简化等式?

以下情况应该有效。

public class ContractsController : ApiController
{
    private readonly DatabaseContext _db = new DatabaseContext();

    [ResponseType(typeof(Contract))]
    public IHttpActionResult Get(int id)
    {
        var model = _db.Contracts.Find(id);
        if (model == null)
        {
            return NotFound();
        }

        return Ok(model);
    }
}