C 斐波那契级数和
我编写了这个代码,用于获取fibnacci系列项的总和: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
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;