Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 投影欧拉偶斐波那契_Java - Fatal编程技术网

Java 投影欧拉偶斐波那契

Java 投影欧拉偶斐波那契,java,Java,我对项目Euler的第二个问题的最短解决方案感兴趣:Java中的偶数斐波那契数 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 通过考虑Fibonacci序列中值不超过400万的项,找到 偶数值项之和 我现在所拥有的: public class fibonnaci { public static void main(String[] args) { int f=0,

我对项目Euler的第二个问题的最短解决方案感兴趣:Java中的偶数斐波那契数

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 通过考虑Fibonacci序列中值不超过400万的项,找到 偶数值项之和

我现在所拥有的:

public class fibonnaci {
    public static void main(String[] args) {
    int f=0,t=0,n=0,s=1;
    for(;n<4000000;n=f+s){
        f=s;s=n;
        if(n%2==0)t+=n;
    }
    System.out.println(t);
   }
}
公共类fibonnaci{
公共静态void main(字符串[]args){
int f=0,t=0,n=0,s=1;

对于(;n您最好的解决方案可能是创建一个Fibonnaci数数组。创建一个带计数器的循环。至少在迭代中,计算下一个数并将其推到数组上。请记住,因为F(n)=F(n-1)+F(n-2),您已经有了F(n-1),F(n-2)已计算并保存,这将是一个简单的加法。如果此数字超过您的限制,请退出循环

现在迭代数组,每隔一个数(将是偶数)相加一次

这可能是您对CPU的最有效使用


更新:作为C.Lang(间接)指出,您可以在计算过程中保持总和,以避免在最后遍历列表。

对此的最佳解决方案可能是创建一个Fibonnaci数数组。创建一个带计数器的循环。至少在迭代过程中,计算下一个数并将其推到数组上。请记住,因为F(n)=F(n-1)+F(n-2),并且您已经计算并保存了F(n-1),F(n-2),这将是一个简单的加法。如果此数字超过您的限制,请退出循环

现在迭代数组,每隔一个数(将是偶数)相加一次

这可能是您对CPU的最有效使用


更新:正如C.Lang(间接地)指出的那样,您可以在计算过程中保持总和,以避免在列表末尾重复。

如果您认为
public static void main(String[]a){System.out.println(4613732);}
作弊,那么不要弄乱奇数值如何

public static void main(String[] args) {
    int f,s,t=s=2,n=8;
    for(;n<4000000;t+=n,f=s,s=n,n=f+4*s);
    System.out.println(t);
}
publicstaticvoidmain(字符串[]args){
int f,s,t=s=2,n=8;

对于(;n如果您认为
publicstaticvoidmain(String[]a){System.out.println(4613732);}
作弊,那么不处理奇数值如何

public static void main(String[] args) {
    int f,s,t=s=2,n=8;
    for(;n<4000000;t+=n,f=s,s=n,n=f+4*s);
    System.out.println(t);
}
publicstaticvoidmain(字符串[]args){
int f,s,t=s=2,n=8;

对于(;n“如何缩短此长度”好的代码与其说是“短”,不如说是1)内存和CPU周期的有效使用2)可由其他程序员扩展和维护。它可能是一种“计算机语言”,但大部分是为人眼设计的。“清晰易懂”因此可以说比“最低字符数”更好。简短:你不需要“&&n”来扩展Andrew所说的,更具描述性的变量名称肯定会更好。我知道,但是专门为我设计的,它应该尽可能短,我的意思是使用尽可能少的字符。如果您想要短的代码,请尝试“如何缩短此长度”好的代码与其说是“短”,不如说是1)内存和CPU周期的有效使用2)可由其他程序员扩展和维护。它可能是一种“计算机语言”,但大部分是为人眼设计的。“清晰易懂”因此可以说比“最低字符数”更好。简短:你不需要“&&n”来扩展Andrew所说的,更具描述性的变量名称肯定会更好。我知道,但是专门为我设计的,它应该尽可能短,我的意思是用尽可能少的字符。如果你想要短的代码,试试看,我想他只是想打印它们。为什么要保存你不需要的代码?如果需要的话,最好只是迭代和打印?因为通过保存它们,他不需要递归地重新编译当发现F(n+1),F(n+2)时吃掉它们,…等等-链接中的fib示例是第n个fib。与提供的示例相比,我的观点是,您仍然需要计算数字以存储它们。毫无疑问,存储数据会产生额外的成本,其中一半是您不需要的,然后您再次遍历数组以打印它。老实说,我不知道有F例如,在链接中,我刚刚向您展示了动态规划。动态规划解决方案的要点是,您只需计算每个F(n)一次,而不是对每一个进行中的数字重复。努力和防御+1。在大多数情况下,我同意你的整体观点。我认为他只是想打印它们。为什么要保存你不需要的那些?如果需要,最好只是迭代和打印?因为保存它们时,他不需要在找到F(n+1)时递归地重新计算它们,F(n+2),…等等-链接中的fib示例是第n个fib。与提供的示例相比,我的观点是,您仍然需要计算数字以存储它们。毫无疑问,存储数据会产生额外的成本,其中一半是您不需要的,然后您再次遍历数组以打印它。老实说,我不知道有F例如,在链接中,我只是向您展示了动态规划。动态规划解决方案的要点是,您只需计算每个F(n)一次,而不是重复计算每个进程数。+1表示努力和防御。在大多数情况下,我同意您的总体观点。