0

我需要求解这个递归函数:f(n) = 5*f(n-1) - 2*f(n-2),其中 f(0)=1 和 f(1)=2。我写了下面的代码,但它没有给出正确的答案——它输出 164,例如,当 n = 4 时,虽然正确的答案是 26(假设我的数学运算正确)。

public static int recurFunction(int n) {
    if(n == 0) {
        return 1;
    } else if(n == 1) {
        return 2;
    } else {
        n = ((5 * recurFunction(n - 1)) - (2 * recurFunction(n - 2)));
        return n;
    }
}
4

2 回答 2

6

你的数学是错误的:)

f(n) = 5*f(n-1) - 2*f(n-2)

f(0) = 1
f(1) = 2
f(2) = 5 * f(1) - 2 * f(0) = 5 * 2 - 2 * 1 = 10 - 2 = 8
f(3) = 5 * f(2) - 2 * f(1) = 5 * 8 - 2 * 2 = 40 - 4 = 36
f(4) = 5 * f(3) - 2 * f(2) = 5 * 36 - 2 * 8 = 180 - 16 = 164
于 2012-10-13T00:11:52.797 回答
2

看起来您的 Java 代码是正确的,但您自己的数学是不正确的。

f(2) = 5f(1) - 2f(0) = 5 * 2 - 2 * 1 = 10 - 2 = 8
f(3) = 5f(2) - 2f(1) = 5 * 8 - 2 * 2 = 40 - 4 = 36
f(4) = 5f(3) - 2f(2) = 5 * 36 - 2 * 8 = 180 - 16 = 164
于 2012-10-13T00:17:36.977 回答