有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

“给定”范围内的java偶数斐波那契数

当起始值为0,1时,此代码工作正常。但是如果我想指定起始值,比如结束值呢?而不是0-500=188;我们把18-500=?;最终创建一个方法,该方法为该范围指定起始值和结束值

int evenFibSum(int limit)
{
    if (limit < 2)
        return 0;

    long ef1 = 0, ef2 = 2;
    long sum = ef1 + ef2;

    while (ef2 <= limit)
    {

        long ef3 = 4 * ef2 + ef1;


        if (ef3 > limit)
            break;


        ef1 = ef2;
        ef2 = ef3;
        sum += ef2;
    }

    return(int) sum;
}


public static void main (String[] args) 
{
    int limit = 500;
    System.out.println(evenFibSum(limit));

}

以下是我试图实现的:

    long startRange;, evenFib1;;
    long sum = startRange + evenFib1;

    if (startRange == 0)
    {
        startRange += 1;
    } 
    else if (startRange % 2 == 0)
    {
      evenFib1 + 2;
    }

共 (2) 个答案

  1. # 1 楼答案

    如果生成斐波那契数的范围是从0到n,那么就生成所有斐波那契数,只取你想要的。例如:

    int []f = fibonacciNumbers(500); //suppose this gives you first 500 fibonacci numbers
    

    如果你想要第18位到第500位之间的数字,你可以选择数组的这一部分

    int []f2 = new int[500-18];
    
    for(int i=0; i<(500-18); i++){
       f2[i] = f[18+i];
    }
    
  2. # 2 楼答案

    您的代码只需要检查ef2,就像您检查limit一样:

    long evenFibSumBetween(int start, int limit)
    {
        if (limit < 2)
            return 0;
    
        long ef1 = 0, ef2 = 2;
        long sum = 0;
        if (start <= ef2)
            ef1 + ef2;
    
        while (ef2 <= limit)
        {  
            long ef3 = 4 * ef2 + ef1;
            if (ef3 > limit)
                break;
            ef1 = ef2;
            ef2 = ef3;
            if (start <= ef2)
                sum += ef2;
        }
        return sum;
    }
    

    但是,这与较慢的速度相同:

    long evenFibSumBetween(int start, int limit) {
        return evenFibSub(limit) - evenFibSum(start - 1);
    }