我是一个初级程序员,需要在java中编程一个应用程序,要求一个数字,然后打印前n个数字的卢卡斯数字。例如,当放入7时,它输出: 2,1,3,4,7,11,18。
为了清楚起见,lucas数被定义为:
2,如果n=0
1,如果n=1
L(n-1) + L(n-2)若n>1
我真的不知道如何在java中编写这个程序。因为我不能把它翻译成java代码。我已经想了一段时间了,但还是想不通。另外,当我有计算第N个lucas数的代码时,我现在将如何输出直到第N个数为止的所有第一个Lucan数。你们中的一些人可以帮助我正确的gte方式或给我一些提示吗?非常感谢!
发布于 2010-09-25 19:54:56
你对Lucas数的定义是递归的,也就是说,要计算第N个lucas数,你已经需要知道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数的任何算法都可以。如果你真的擅长数学,你甚至可以尝试为Lucas数找到一个封闭的公式,但这绝对超出了高中数学的范畴(搜索标签将是“常系数线性差分方程”)。
发布于 2010-09-25 19:49:58
如果你不确定如何做整个事情,把问题分解成更小的部分,直到你可以开始。
试着处理每个案例,一次一个。实现'2 if n=0‘的情况,测试它是否正常工作。计算很简单,但您也必须编写调用您的实现的代码。这个简单的案例可以帮助您检查它周围的代码是否正常工作。
然后实现下一个,检查它是否仍然有效,实现最后一个。随着你的脚步,它会变得越来越清晰。
发布于 2013-06-14 23:27:29
如果有人正在寻找一个公式,并且发生在这个页面上,那么这可能会有所帮助。在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。
https://stackoverflow.com/questions/3793647
复制相似问题