java - 使递归函数迭代

标签 java math recursion iteration

作业:根据以下公式计算an:

  • a0 = 1
  • a1 = 3
  • a2 = 5
  • an = an-1 * a2n-2 * a3 n-3

我在使函数迭代时遇到问题。我想出了如何递归地做到这一点。我将如何专门针对此任务以及一般情况下执行此操作?

我的递归代码:

public static BigInteger recurs(int bigInteger){
    BigInteger sum;

    if (bigInteger == 0) {
        sum = new BigInteger(String.valueOf("1"));
    } else if (bigInteger == 1) {
        sum = new BigInteger(String.valueOf("3"));
    } else if (bigInteger == 2) {
        sum = new BigInteger(String.valueOf("5"));
    } else {
        sum = recurs(bigInteger-1).multiply(recurs(bigInteger-2).pow(2).multiply(recurs(bigInteger-3).pow(3)));
    }

    return sum;

}

最佳答案

您需要记住最后三个值,并根据最后一个值每次计算一个新值。

public static BigInteger iter(int n) {
    BigInteger a = BigInteger.valueOf(1);
    BigInteger b = BigInteger.valueOf(3);
    BigInteger c = BigInteger.valueOf(5);
    switch (n) {
        case 0: return a;
        case 1: return b;
        case 2: return c;
        default:
            for (int i = 2; i < n; i++) {
                BigInteger next = c.multiply(b.pow(2)).multiply(a.pow(3));
                a = b;
                b = c;
                c = next;
            }
            return c;
    }
}

注意这是 O(n) 而不是 O(n^3)

关于java - 使递归函数迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068958/

相关文章:

java - 如何在Java上正确编写RabbitMQ Publisher?

java - 如何创建符合特定 xsd 的基于 java 的自定义 xml 编辑器?

java - 极其紧凑的 UUID(使用所有字母数字字符)

c - 为什么这个涉及指数的 C 计算会产生错误的答案?

javascript - 用于递归函数的 Webworker

recursion - 我的消息传递示例有什么问题?

java - 如何消除同一包中两个类之间的循环依赖?

java - 简单的 JApplet 获取 "NoClassDefFoundError"并且不知道它来自哪里

c - 线性插值 : calculate correction based on 2D table

java - 关于 Java 新手的递归