如何计算卢卡斯数?

时间:2015-08-03 17:02:31

标签: java algorithm

卢卡斯数是一个如下定义的序列中的数字:

L(n) = 2 if n = 0

L(n) = 1 if n = 1

,否则

L(n) = L(n - 1) + L(n - 2)

这是我的代码:

public class Lucas {
    public static int lucasnum(int n) {
        if (n >= 0) {
            if (n == 0)
                return 2;
            else if (n == 1)
                return 1;
            else
                return lucasnum(n - 1) + lucasnum(n - 2);
        }
        else{
            if (n == 0)
                return -2;
            else if (n == -1)
                return -1;
            else
                return lucasnum(n + 1) - lucasnum(n + 2);
        }
    }

    public static void main(String[] args) {
        System.out.println(Lucas.lucasnum(-5));
    }
}

但我有一些负数的问题。如果n == -5它必须返回-11,但上面的代码会返回3

2 个答案:

答案 0 :(得分:3)

我认为你得到了负指数的公式。

由于,

  

L(n+2)=L(n+1)+L(n)

     

=> L(n)=L(n+2)-L(n+1)

所以,改变

return lucasnum(n + 1) - lucasnum(n + 2);

return lucasnum(n + 2) - lucasnum(n + 1);

更快的算法

您的算法是一种O(n)算法,对于大n来说速度很慢。你可以更快地完成它。

答案 1 :(得分:2)

更改

return lucasnum(n + 1) - lucasnum(n + 2);

return lucasnum(n + 2) - lucasnum(n + 1);