如何用Java计算Lucas数

时间:2010-09-25 11:44:39

标签: java

嘿伙计们,我是一名初学程序员,需要在java中编写一个应用程序来编写一个数字,然后输出前n个Lucas数字。例如,当输入7时,它输出:2,1,3,4,7,11,18。

为了清楚起见,卢卡斯数字被定义为:

2,如果n = 0

如果n = 1,

1

如果n> 1,则p(L-n)+ L(n-2)

我真的不确定如何在java中编程。因为我无法将其翻译成java代码。我已经考虑了一段时间,但仍然无法弄明白。此外,当我有计算第N个卢卡斯数的代码时,我现在将如何输出所有第一个Lucan数字直到第N个数字。你们中的一些人可以帮助我以正确的方式获取或给我提示吗?非常感谢!

3 个答案:

答案 0 :(得分:5)

你对卢卡斯数的定义是递归的,即,为了计算第n个卢卡斯数,你需要知道第N-1和N-2。

天真这样做的方法是

public int lucas(int N) {
    if( N == 0 ) return 2;
    if( N == 1 ) return 1;
    return lucas(N-1) + lucas(N-2);
}

但是,你只需打印数字,不是吗?那么实际上这很容易。

int L2 = 2;
int L1 = 1;
for( int i = 2; i <= N; i++ ) {
    int L = L1 + L2;
    print(L); //or whatever output function you have
    L2 = L1;
    L1 = L;
 }

这个想法是保留最后两个数字,你需要计算接下来的两个数字,总是在手边。

PS:这些Lucas数字就像具有不同起始值的Fibonacci数字,因此Fibonacci数的任何算法都可以。如果你真的擅长数学,你甚至可以尝试为卢卡斯数找到一个封闭的公式,但它肯定超出了高中数学(搜索标签将是“具有常系数的线性差分方程”)。

答案 1 :(得分:1)

如果您不确定如何做到这一切,请将问题分解成更小的部分直到您可以开始。

一次尝试一个案例。实现'2 if n = 0'的情况,测试它是否有效。计算是微不足道的,但您也必须编写调用您的实现的代码。这个简单的案例可以帮助您检查周围的代码是否正常工作。

然后实现下一个,检查它是否仍然有效,实现最后一个。你去的时候会变得更加清晰。

答案 2 :(得分:0)

万一有人正在寻找一个公式并在这个页面上发生,那么这可能会有所帮助。在Windows中,使用以下行并将每个N替换为所需的整数,复制修改后的行并将其粘贴到Windows的计算器中:

  

(5@/2+0.5)YN +( - (5@/2+0.5))Y(N)=

例如,如果您想查找7的Lucus编号,可以将此行粘贴到Windows的计算器中:

  

(5@/2+0.5)Y7 +( - (5@/2+0.5))Y(-7)=

结果将是29