C 斐波那契级数和

C 斐波那契级数和,c,fibonacci,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 < thresho

我编写了这个代码,用于获取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;
}

因为据我所知,log10()会消耗大量处理器时间和资源,所以有更有效的方法吗?

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

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

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

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


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

您过度担心性能。如果一段代码可以工作,并且没有性能问题,那么这种优化是无用的。代码已经做到了这一点。我认为很难打败O(N)。@DavidHeffernan您的代码对每个输入都做O(N)。但您可以执行一次,然后对新输入执行Log(N)。
if((log10(sum) + 1) >= 7)
          break;