斐波那契系列之和

时间:2014-11-27 19:36:07

标签: c fibonacci

我制作了这段代码来获得fibnacci系列的术语总和:

int main() {
  int previous, current = 0, next = 1,
      sum = current, threshold;
  printf("Enter the threshold: ") ;
  scanf("%d", &threshold) ;
  printf("Fibonacci series: %d", current) ;
  while (sum < threshold)
  {
    previous = current;
    current = next;
    next = previous + current;
    printf(" + %d", current) ;
    sum += current;

    if((log10(sum) + 1) >= 7)
      break;
  }
  printf(" = %d\n", sum);
  return 0;
}

我需要你从系列的那一端告诉我所有术语的总和大于7位数。我试过这个,我不知道它是否方便:

if((log10(sum) + 1) >= 7)
          break;

因为我已经理解 log10()消耗了大量的处理器时间和资源,¿有更有效的方法吗?

2 个答案:

答案 0 :(得分:5)

最简单,最自然的方法是测试sum >= 1000000

答案 1 :(得分:0)

您的算法是O(n)。您可以通过更改算法来改进代码。

您可以将此总和缓存在cacheData数组中。 (cacheData[i] =从1到i的fibnacci系列之和)

计算此数组的所有总和小于10 ^ 7.

然后使用二进制搜索在O(LogN)中找到小于输入阈值的第一个和。